自己想找找归并排序怎么实现的,结果在网上居然没找到一个能用的归并排序的算法,经过自己的琢磨,现在写出了下面的算法。
void MergeArray(int *a,int first,int middle,int last) { int n1 = middle-first; int n2 = last - middle-1;//注意此处的长度 int *L = new int[n1+1]; int *R = new int[n2+1]; int i , j ,k; for(i = 0;i<=n1;i++) L[i] = a[first+i]; for(j = 0;j<=n2;j++) R[j] = a[middle+j+1]; k = 0,i=0,j=0; while(i<=n1 &&j<=n2) { if(L[i]<R[j]) a[first+i+j] = L[i++]; else a[first+i+j] = R[j++]; } while(i<=n1) { a[first+i+j] = L[i++]; } while(j<=n2) { a[first+i+j] = R[j++]; } delete []L; delete []R; } void mergesort(int *a, int first, int last) { if(first>=last) return; if(first<last) { int mid = (first + last) / 2; mergesort(a, first, mid); //左边有序 mergesort(a, mid + 1, last); //右边有序 MergeArray(a, first, mid, last); //再将二个有序数列合并 } } void MergeSort(int *a, int n) { mergesort(a,0,n-1); } void PrintArray(int *b) { for(int i = 0;i<10;i++) { cout<<b[i]<<" "; } cout<<endl; } int main() { int a[10]; for(int k = 0;k<5;k++) { for(int i = 0;i<10;i++) { a[i] = rand()0; } cout<<"排序前:"; PrintArray(a); //QSort(a,0,9); MergeSort(a,10); cout<<"排序后:"; PrintArray(a); cout<<endl; } return 0; }