C语言——归并排序练习题
来源:互联网 发布:java项目简介怎么写 编辑:程序博客网 时间:2024/05/16 15:13
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
/*使用随机数列出一组数据,然后排序。 21 80 71 66 48 71 40 90 29 22 83 7 55 66 5 42 21 80 66 71 21 66 71 80 48 71 40 90 40 48 71 90 21 40 48 66 71 71 80 90 22 29 7 83 7 22 29 83 55 66 5 42 5 42 55 66 5 7 22 29 42 55 66 83 5 7 21 22 29 40 42 48 55 66 66 71 71 80 83 90 5 7 21 22 29 40 42 48 55 66 66 71 71 80 83 90*/#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 16int a[N], b[N];void init_array(int l, int r){int i;srand(time(NULL));for (i=l; i<=r; i++) a[i] = rand()%100;}void show_array(int l, int r){int i;for (i=0; i<l; i++) printf(" ");for (i=l; i<=r; i++) printf("%3d", a[i]);printf("\n");}void merge(int l, int m, int r){int i, j, k;for (i=l; i<=r; i++) b[i] = a[i];i = l; j = m+1; k = l;while (i<=m && j<=r)if (b[i]<b[j]) a[k++] = b[i++];else a[k++] = b[j++];while (i<=m) a[k++] = b[i++];while (j<=r) a[k++] = b[j++];}void merge_sort(int l, int r){if (l>=r) return;int m = (l+r)/2;merge_sort(l, m);merge_sort(m+1, r);merge(l, m, r);show_array(l, r);}int main(){init_array(0, N-1);show_array(0, N-1);merge_sort(0, N-1);show_array(0, N-1);return 0;}
- C语言——归并排序练习题
- C语言——单链表排序练习题
- 归并排序C语言
- 归并排序C语言
- C语言 归并排序
- 读书笔记—C 归并排序
- 归并排序 C语言数据结构
- 归并排序 c语言实现
- 归并排序(C语言)
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序C语言代码
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- 归并排序(c语言)
- KinectFusion--3D重建的利器
- oracle select执行顺序
- JFreeChart中文API
- c语言第二堂
- 自己动手创建简单的MVC框架
- C语言——归并排序练习题
- unity自带LightMapping和3Ds Max烘焙贴图的小对比
- 我的第一个Servlet(一)——搭建环境
- schemaExport create 方法参数
- oracle Move空间释放
- Android-StatusBar+Notification
- android 在xml文件中引用自定义View
- Unity3D 换贴图脚本
- JPEG文件编/解码详解(1)