排序算法之归并排序<Merge_Sort>及其C语言代码实现
来源:互联网 发布:明朝北伐 知乎 编辑:程序博客网 时间:2024/06/06 17:59
概述:额,还是举个栗子吧:
初始序列[ 98 , 1 , 23 , 4 , 2 , 9 , 8 , 18]
//第一步[ 98 | 1 | 23 | 4 | 2 | 9 | 8 | 18]//第二步[ 1 98 | 4 23 | 2 9 | 8 18]//第三步[ 1 4 23 98 | 2 8 9 18]//第三步[ 1 2 4 9 18 23 98]
排序完成:
核心代码:
void Merge(int A[],int Temp[],int L,int R,int RightEnd){ int LeftEnd=R-1; int p=L,i; int num=RightEnd-L+1; while(L<=LeftEnd&&R<=RightEnd) if(A[L]<=A[R]) Temp[p++]=A[L++]; else Temp[p++]=A[R++]; while(L<=LeftEnd) Temp[p++]=A[L++]; while(R<=RightEnd) Temp[p++]=A[R++]; for(i=0;i<num;i++,RightEnd--) A[RightEnd]=Temp[RightEnd];}void MSort(int A[],int Temp[],int L,int RightEnd){ int center; if(L<RightEnd) { center=(L+RightEnd)/2; MSort(A,Temp,L,center); MSort(A,Temp,center+1,RightEnd); Merge(A,Temp,L,center+1,RightEnd); }}void Merge_sort(int A[],int N){ int *Temp=(int *)malloc(N*sizeof(int)); if(Temp) { MSort(A,Temp,0,N-1); free(Temp); } else printf("no space!\n");}
测试样例
int main(){ int A[]={1,3,63,5,78,9,12,52,8}; printf("Previous Arrary:"); for(int i=0;i<9;++i) printf(" %d",A[i]); Merge_sort(A,9); printf("\nSorted Arrary:"); for(int i=0;i<9;++i) printf(" %d",A[i]); printf("\n"); return 0;}
运行结果:
Previous Arrary: 1 3 63 5 78 9 12 52 8Sorted Arrary: 1 3 5 8 9 12 52 63 78请按任意键继续. . .
0 0
- 排序算法之归并排序<Merge_Sort>及其C语言代码实现
- 排序算法详解【归并排序-Merge_Sort】
- 排序算法详解【归并排序-Merge_Sort】
- 排序--归并算法思想及其代码实现
- 归并排序Merge_Sort
- 归并排序MERGE_SORT
- 归并排序(MERGE_SORT)
- 归并排序(Merge_Sort)
- 排序算法之冒泡排序<Bubble_Sort>及其C语言代码实现
- 排序算法之插入排序<Insertion_Sort>及其C语言代码实现
- 排序算法之希尔排序<Shell_Sort>及其C语言代码实现
- 排序算法之选择排序<Selection_Sort>及其C语言代码实现
- 排序算法之堆排序<Heap_Sort>及其C语言代码实现
- 排序算法之快速排序<Quick_Sort>及其C语言代码实现
- 【算法导论】归并排序,C语言实现
- C语言--归并排序算法实现
- C语言归并排序算法的实现
- C语言实现归并排序算法
- 每天10个前端知识点:事件篇
- 算法提高 Torry的困惑(提高型)
- 一个例子说明机器学习在做什么
- QQ机器人{功能介绍篇}
- 计算机中内存、cache和寄存器之间的关系及区别
- 排序算法之归并排序<Merge_Sort>及其C语言代码实现
- 科普:关于ES版的CPU(正显、不显、QS等)
- 使用js和jquery实现点击图片上传及预览
- 37-1-book
- 本地项目上传到github
- 手把手教你写Kconfig---基于tiny4412开发板
- JSP九大内置对象
- PAT(甲级)1041. Be Unique (20)
- 判断两个日期是否相等