C语言实现归并排序
来源:互联网 发布:李炎恢php第一季讲义 编辑:程序博客网 时间:2024/06/07 13:42
归并排序
时间复杂度:O(nlogn)
空间复杂度:O(n)
稳定性:稳定
实现原理:采用分治法(Divide and Conquer)将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,也叫二路归并。
代码实现:采用递归方法实现
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 10//实现归并并把最后结果保存到listl中void Merging(int *listl,int listl_Size,int *listr,int listr_Size){ int i,j,k,n; int tmp[MAXSIZE]; //临时数组存放排序好的数据 i=j=k=0; /*i是指向listl的下标 ,j是指向listr的下标*/ while(i<listl_Size && j<listr_Size) { //实现排序,小的先存放 if(listl[i]<listr[j]) { tmp[k++]=listl[i++]; } else { tmp[k++]=listr[j++]; } } //把最大的依次追加在最后 while(i<listl_Size) { tmp[k++]=listl[i++]; } while(j<listr_Size) { tmp[k++]=listl[j++]; } //把临时数组的数据存放到listl中 for(n=0;n<listl_Size+listr_Size;n++) { listl[n]=tmp[n]; }}void Merge_sort(int a[],int len){ /* 只有当len大于1时才递归,否则结束递归 */ if(len>1) { int *listl=a;//定义指针指向数组左半部分 int listl_Size=len/2; int *listr=a + len/2;//定义指针指向数组右半部分 int listr_Size=len - listl_Size; Merge_sort(listl,listl_Size); Merge_sort(listr,listr_Size); //实现归并 Merging(listl,listl_Size,listr,listr_Size); }}//测试代码 int main(int argc, char const *argv[]) { int array[]={123,56,89,2,65,3}; Merge_Sort(array,6); int i; for( i = 0 ; i < 6 ; i++) { printf("%d ",array[i]); } return 0; }
1 0
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- C语言实现归并排序
- 归并排序 --C语言实现
- 排序(6)---------归并排序(C语言实现)
- 归并排序及C语言实现
- 归并排序递归实现C语言
- 归并排序非递归实现C语言
- 归并排序 MergeSort C语言实现
- C语言实现的归并排序
- 归并排序C语言实现MergeSort
- 用C语言实现归并排序
- 归并排序的C语言实现
- C语言实现普通归并排序
- 2016夏季练习——数论
- Bzoj3509:[CodeChef] COUNTARI:分块+FFT
- hibernate一些问题
- 操作系统思考 第一章 编译
- extjs中submit提交后不进入success也不进入failure 解决方法
- C语言实现归并排序
- 切换develop命令获取git上其他分支的代码
- bootstrap 2016.07.12回顾
- 数据库相关备忘录
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结
- 关于颜色直方图和反向投影的一些理解
- 文章标题
- IONIC----03.ionicLoading
- 【转载】Oracle用一个表的列更新另一个表对应记录的列