排序算法——合并排序
来源:互联网 发布:加工中心 自动编程 编辑:程序博客网 时间:2024/06/05 18:39
合并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
最坏时间复杂度 O(nlogn)
合并排序是稳定的排序算法
- #include <stdio.h>
- #include <stdlib.h>
- void merge(int a[], int p, int q, int r)
- {
- int i, j, k;
- int *temp = (int *)malloc((r - p + 1) * sizeof(int));
- i = p;
- j = q + 1;
- k = 0;
- while ((i <= q) && (j <= r)) {
- if (a[i] < a[j])
- temp[k] = a[i++];
- else
- temp[k] = a[j++];
- k++;
- }
- while (i <= q)
- temp[k++] = a[i++];
- while (j <= r)
- temp[k++] = a[j++];
- for (i = 0; i < r - p + 1; i++) {
- a[p+i] = temp[i];
- }
- free(temp);
- }
- void merge_sort(int a[], int p, int r)
- {
- int q;
- if (p < r) {
- q = (p + r) / 2;
- merge_sort(a, p, q);
- merge_sort(a, q + 1, r);
- merge(a, p, q, r);
- }
- }
- int main()
- {
- int a[] = {5,2,4,7,1,3,2,6}, i;
- int p = 0, r = sizeof(a) / sizeof(int);
- merge_sort(a, p, r);
- for (i = 0; i < r; i++)
- printf("%d ", a[i]);
- return 0;
- }
12-18行选择最小的元素复制到temp,19-22行将剩余序列的元素复制到temp,24-26行将排好序的序列复制到数组。
- 排序算法——合并排序
- 分治算法—合并排序
- 排序算法---合并排序
- 排序算法-合并排序
- 算法导论——合并排序
- 算法之旅——合并排序
- 排序算法之二——合并排序
- (4)排序算法——合并排序
- 减治算法——合并排序和快速排序
- 排序算法之合并排序
- 简单排序算法:合并排序
- 排序算法(二):合并排序
- 排序算法之合并排序
- 排序算法之合并排序
- 排序算法·合并排序
- 合并排序算法
- 合并排序算法
- 算法-----合并排序
- 让WindowsXP不再出现内存读写错误
- 很颓废
- 基于磁盘系统的PPRC数据级灾难备份方案
- 基于磁盘系统的PPRC数据级灾难备份方案
- *** 易经 与 相对论的猜想 ***
- 排序算法——合并排序
- 中国IT成功人士特点6大成功密码全解析
- 子网的概念
- Javascript的document,window对象(DOM)
- 0-1背包问题的动态规划解法
- 你还记得小时候怎么吃药的吗?
- 递归求解多项式以及递归求排列
- IP数据报
- 【第6章】模仿MINIX的中断处理【一】