int main(){ int bigArray[10]={1,-1,4,-1,-1,6,-1,8,-1,9}; int smallArray[5]={2,5,7,10,11}; printf("\nPress enter to compress array to right : \n"); getch(); AlignRight(bigArray,10); printf("\nPress enter to see modified array : \n"); getch(); int i; for(i=0;i<10;i++){ printf("%d ",bigArray[i]); } MergeArray(bigArray,smallArray,10,5); printf("\nPress enter to see merged array : \n"); getch(); for(i=0;i<10;i++){ printf("%d ",bigArray[i]); } return 0; }
void AllSort::MergeIter(int first, int last, int temp[]) { if (first < last) { int mid = (last + first) / 2; MergeIter(first, mid, temp); MergeIter(mid + 1, last, temp); MergeArray(first, mid, last, temp); } }
void MergeSortArray(int *a, int begin, int end) { if ((end - begin) <= 1) return; int mid = (begin + end) / 2; MergeSortArray(a, begin, mid); MergeSortArray(a, mid, end); MergeArray(a, begin, mid, end); }
void MergeSort(int *a,int begin,int end,int *temp) { if(begin < end) { int mid = (begin + end) / 2; /** * 分别递归进行排序,也称为2-路归并; */ MergeSort(a,begin,mid,temp); //左边有序 MergeSort(a,mid + 1,end,temp); //右边有序 MergeArray(a,begin,mid,end,temp); //将左右两边有序的数组合并 } }