天天都在排序。。簡直就是要給這個混亂的世界一個正確的秩序。。不過嘛。排序也有快慢之分,
冒泡排序法,,思路很簡單就是一個個上去打擂台,,這樣的時間復雜度很糟糕,,O(N^2)中O是一個常數,O(N^2)是指最大上限(估值)n(n-1)/2 = (n^2 - n)/2最高位估值仍為n^2兩種情況是一樣的。
選擇排序法,,每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最前(最后),直到全部待排序的數據元素排完。選擇排序是不穩定的排序方時間復雜度為O(n),最壞情況下仍為O(n^2)。
排序比較好的還有這種logn級別的排序法,
先上代碼,,個位可以先瞅瞅,。一般第一次不會很明白。。下面有解釋。。
1 //快速排序 2 #include<stdio.h> 3 int main() 4 { void quick_sort(int s[], int l, int r); 5 int a[10001],i,x; 6 while(~scanf("%d",&x)) 7 { for(i=0;i<x;i++) 8 scanf("%d",&a[i]); 9 quick_sort(a,0,x-1);//第一個參數是數組地址,然后是需要排序的區間,i就是長度 10 for(i=0;i<x;i++) 11 { 12 printf("%d ",a[i]);//再順序輸出 13 } 14 printf("\n"); 15 } 16 } 17 void quick_sort(int s[], int l, int r)//返回調整后基准數的位置 18 { 19 if (l < r)//只要是滿足起點小於終點 20 { 21 //Swap(s[l], s[(l + r) / 2]); //將中間的這個數和第一個數交換 參見注1 22 int i = l, j = r, x = s[l];//賦予初始值,i就是起點j就是終點 //s[l]就是當前的值 23 while (i<j) 24 { 25 while(i<j&&s[j]>=x) // 從右向左找第一個小於x、起點的數 26 j--;//找到第一個小於的就會跳出循環j的值就是當前小於的那個 27 if(i<j) 28 s[i++]=s[j];//將s[j]填到s[i]中,s[j]就形成了一個新的坑,i++ 29 while(i<j&&s[i]<x) // 從左向右找第一個大於等於x的數 30 i++; 31 if(i<j) 32 s[j--]=s[i];// 33 } 34 s[i] = x;//退出時,i等於j。將x填到這個坑中。 35 quick_sort(s,l,i-1); //遞歸調用前半段和后半段。 36 quick_sort(s,i+1,r); 37 } 38 }