归并排序
归并排序的数组实现
1 //折半插入排序 2 void insertSort_Binary(int *arr, int len) 3 { 4 int i, j;//工作指针 5 int low, mid, high;//折半查找指针 6 int current;//暂存待插入的元素 7 8 //将各个元素插入到前面的有序序列 9 for(i = 0; i< len; i++) 10 { 11 current = arr[i]; 12 low = 0; 13 high = i - 1; 14 while(low <= high) 15 { 16 mid = low + (high-low)/2; 17 if(arr[mid] > current) 18 high = mid - 1; 19 else 20 low = mid + 1; 21 } 22 //后移元素 23 for(j = i - 1; j >= high+1; j--) 24 arr[j+1] = arr[j]; 25 //插入目标元素 26 arr[high+1] = current; 27 } 28 } 29 30 //归并排序 31 void mergeSort(int *arr, int len1, int *arr2, int len2, int *arr3) 32 { 33 int i = 0;//遍历数组1的指针 34 int j = 0;//遍历数组2的指针 35 int k = 0;//存储归并后的元素的指针 36 37 //对数组1、2进行排序,使之成为有序数组 38 insertSort_Binary(arr1,len1); 39 insertSort_Binary(arr2,len2); 40 41 while(i < len1 && i < len2) 42 { 43 if(arr1[i] < arr2[j]) 44 arr3[k++] = arr1[i++]; 45 else 46 arr3[k++] = arr2[j++]; 47 } 48 while(i < len1) 49 arr3[k++] = arr1[i++]; 50 while(j < len2) 51 arr3[k++] = arr2[j++]; 52 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。