首页 > 代码库 > 归并排序
归并排序
归并排序还是比较好理解的。归并的含义是将两个或者两个以上的有序表组合成一个新的有序表。
具体方式是:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到若干长度为2或者1的有序子序列,再两两归并。。。直至得到一个长度为n的有序序列为止,这就称之为2路归并排序。
实现:
/* 归并排序 by Rowandjj 2014/7/24 */ #include<iostream> using namespace std; #define MAX 100 void Merge(int *list1,int *list2,int list1_size,int list2_size) { int temp[MAX];//辅助数组 int i,j,k; i = j = k = 0; //合并两个有序数组的操作,由于这里使用了辅助数组,故而可以从前向后复制 //在之前的一篇文章中介绍合并有序数组采用的是从后向前复制,那是由于不使用辅助空间,而且数组1足够大 while(i < list1_size && j < list2_size) { if(list1[i] < list2[j]) { temp[k++] = list1[i++]; }else { temp[k++] = list2[j++]; } } while(i < list1_size) { temp[k++] = list1[i++]; } while(j < list2_size) { temp[k++] = list2[j++]; } //将已经排好序的辅助数组元素复制到源数组上 for(i = 0; i < list1_size+list2_size; i++) { list1[i] = temp[i]; } } void MergeSort(int arr[],int len) { if(arr == NULL || len <= 1) { return; } int *list1 = arr; int list1_size = len/2; int *list2 = arr+list1_size; int list2_size = len - list1_size; MergeSort(list1,list1_size);//对左侧递归进行归并操作 MergeSort(list2,list2_size);//对右侧递归进行归并操作 Merge(list1,list2,list1_size,list2_size); } int main() { int arr[] = {9,8,5,3,7,2,1,0,4}; MergeSort(arr,9); for(int i = 0; i < 9; i++) { cout<<arr[i]<<" "; } cout<<endl; return 0; }
归并排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。