归并排序
来源:互联网 发布:盘古排序指标源码 编辑:程序博客网 时间:2024/06/08 18:05
归并排序还是比较好理解的。归并的含义是将两个或者两个以上的有序表组合成一个新的有序表。
具体方式是:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到若干长度为2或者1的有序子序列,再两两归并。。。直至得到一个长度为n的有序序列为止,这就称之为2路归并排序。
实现:
/*归并排序by Rowandjj2014/7/24*/#include<iostream>using namespace std;#define MAX 100void 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;}
2 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 软件可行性分析与需求分析经典论述
- android屏蔽listview 的item事件
- 利用jquery的ajax实现异步请求发送数据到后台
- Spring的AOP配置(基于xml)
- JIRA 数据库 设计 点滴
- 归并排序
- 入侵检测IDS学习--snort规则
- JavaScript技巧
- CGContextSaveGState与CGContextRestoreGState的功用
- php 框架thinkphp里自写的常用函数
- 罗网营销教您企业营销方法
- mysql的简单实例
- 获取到插入条目后的自递增的值
- Effective C# Item6:明辨值类型和引用类型的使用场合