快速排序採用的是分治法,其平均時間複雜度爲O(nlogn)
一趟快速排序的算法是[1]:
5)重複第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到爲止。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另循環結束。)
下面是快速排序的代碼:
[cpp] view plaincopyprint?
- #include <iostream>
- using namespace std;
- int a[] = {100,8,15 ,37,26,13,27,49,55,14};
- void quick_sort(int a[], int left, int right)
- {
- if(left<right)
- {
- int i = left;
- int j = right;
- int x = a[i];
- while(i<j)
- {
- while(i<j&&a[j]>x)
- j--;
- if(i<j){
- a[i] = a[j];
- i++;
- }
- while(i<j&&a[i]<x)
- i++;
- if(i<j){
- a[j] = a[i];
- j--;
- }
- }
- a[i] = x;
- quick_sort(a, left, i-1);
- quick_sort(a, i+1, right);
- }
- }
- int main()
- {
- cout<<"Before sort: ";
- for(int i =0 ; i<10;i++)
- cout<<a[i]<<" ";
- cout<<endl;
- quick_sort(a, 0, 9);
- cout<<"After sort: ";
- for(int i =0 ; i<10;i++)
- cout<<a[i]<<" ";
- cout<<endl;
- }
冒泡排序
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <stdio.h> #define SIZE 8 void
bubble_sort( int
a[], int n); void
bubble_sort( int
a[], int n) { int
i, j, temp; for
(j = 0; j < n - 1; j++) for
(i = 0; i < n - 1 - j; i++) {
if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
} } } int
main() { int
number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12}; int
i; bubble_sort(number, SIZE); for
(i = 0; i < SIZE; i++) { printf ( "%d" , number[i]); } printf ( "\n" ); |