首页 > 代码库 > 归并排序
归并排序
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
例如有两个有序表:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为:(4,7,8,10,13,15,19,20)。
代码:
#include <iostream> using namespace std; void mergearray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { temp[k++] = a[i] > a[j] ? a[j++] : a[i++]; } while (i <= m) temp[k++] = a[i++]; while (j <= n) temp[k++] = a[j++]; for (i = 0; i < k; i++) a[first + i] = temp[i]; } void mergeSort(int data[], int start, int end ,int temp[]){ if(start < end){ mergeSort(data,start ,(start+end)/2,temp); mergeSort(data,(start+end)/2+1 ,end,temp); mergearray(data,start,(start+end)/2,end,temp); } } int main(){ int input[9]={0,1,1,5,6,71,3,4,9}; int output[9]; mergeSort( input ,0,8,output); // mergeSort(input,0,8); for(int i=0;i<9 ;i++){ cout << output[i] <<" "; } // cout<< BinarySearch(input,0,8,8); return 0; }
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。