归并排序
来源:互联网 发布:javascript的数据类型 编辑:程序博客网 时间:2024/06/03 09:42
主要思想为:将待排数组不断划分成更小的区间(递归),直到剩下一个元素,然后返回,然后将左右各返回的一个元素(一共两个)进行合并。合并时的算法就是将两个有序数组合为一个,而递归的尽头只剩下一个元素时,他自身就可看为是有序的。所以每次返回的都是两个有序数组,再合并成一个有序的再返回……
#include <stdio.h>void Merge(int a[],int start,int end){ int mid=(start+end)/2; int b[end-start]; int i,j,k; i=start; j=mid; k=0; while(i<mid||j<end) { //1、i没完 j完了 //2、i j都没完 但是a[i]<a[j] if(j==end||i<mid&&a[i]<a[j]) //i<mid 是“i完了j没完时加的条件” b[k++]=a[i++]; //1、i完了 j没完 //2、i j都没完 但是a[i]<a[j]不成立 else b[k++]=a[j++]; } //copy back for(i=start,j=0;j<k;) a[i++]=b[j++];}void MergeSort(int a[],int left,int right){ //保证元素个数>1 if(right-left>1) { int mid=(right+left)/2; MergeSort(a,left,mid); MergeSort(a,mid,right); Merge(a,left,right); }}int main(void){ int a[9]={5,3,6,2,1,4,7,8,9}; int i; MergeSort(a,0,9); for(i=0;i<9;i++) printf("%d\t",a[i]); return 0;}
事件复杂度:o(nlogn) (最好最坏一样)稳定
阅读全文
1 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- iOS 百度地图坐标转化
- 常见的八种导致 APP 内存泄漏的问题
- PHP第一讲:了解PHP 了解web开发
- mysql 函数及存储过程
- HDU-6180 Schedule
- 归并排序
- 问题 A: 班级排名
- 1002. A+B for Polynomials (25)
- 原创:路由配置实践 两个局域网主机的互连 VM linu
- 快速排序(JAVA)
- Linux环境查看系统参数
- 最大熵模型
- POJ1979 /Openjudge1818 Red and Black解题报告(深度优先搜索,图的遍历)
- sql注入漏洞 为什么有 怎么解决