******归并排序复杂度n(logn)他的复杂度不会退化哦*.*
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 void Merge(int A[],int low,int middle,int high) 7 { 8 int i,j,k; 9 int *B = new int[high - low + 1]; 10 i = low; 11 j = middle + 1; 12 k = low; 13 while(i <= middle && j <= high) //两个子序列非空 14 { 15 if(A[i] <= A[j]) 16 B[k++] = A[i++]; 17 else 18 B[k++] = A[j++]; 19 } 20 while(i <= middle) 21 { 22 B[k++] = A[i++]; 23 } 24 while(j <= high) 25 { 26 B[k++] = A[j++]; 27 } 28 for(i = low;i <= high;i++) 29 { 30 A[i] = B[i]; 31 } 32 } 33 void MergeSort(int A[],int low,int high) 34 { 35 int middle; 36 if(low < high) 37 { 38 middle = (low + high) / 2; //取中点 39 MergeSort(A,low,middle); 40 MergeSort(A,middle + 1,high); 41 Merge(A,low,middle,high); //合并 42 } 43 } 44 int main() 45 { 46 int i,j,m,n,c[1005]; 47 scanf("%d",&n); 48 for(i = 1;i <= n;i++) 49 { 50 scanf("%d",&c[i]); 51 } 52 MergeSort(c,1,n); 53 for(i = 1;i <= n;i++) 54 { 55 printf("%d",c[i]); 56 } 57 return 0; 58 }