算法基础3:归并排序(Merge Sort)
来源:互联网 发布:arm编程论文 编辑:程序博客网 时间:2024/04/29 12:20
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100void MergeSort(int a[], int n);void mergesort(int a[], int p, int r, int tmp[]);void merge(int a[], int p, int q, int r, int tmp[]);void showSeq(int a[], int n);int main(){ int n, nums[MAXSIZE], i; while (1 == scanf("%d", &n)) { if (0 == n) break; for (i = 0; i < n; i++) scanf("%d", &nums[i]); showSeq(nums, n); MergeSort(nums, n); showSeq(nums, n); } return 0;}void MergeSort(int a[], int n){ int* tmp = (int*)malloc(sizeof(int) * n); // 分配一个n个int大小的数组 mergesort(a, 0, n - 1, tmp); // 开始归并排序 free(tmp);}void mergesort(int a[], int p, int r, int tmp[]){ if (p < r) { int q = (p + r) >> 1; mergesort(a, p, q, tmp); // 排序左半段 mergesort(a, q + 1, r, tmp); // 排序右半段 merge(a, p, q, r, tmp); // 合并 }}void merge(int a[], int p, int q, int r, int tmp[]){ int i = p, j = q + 1, k = p; while (i <= q && j <= r) // 合并两个有序数组 { if (a[i] <= a[j]) tmp[k++] = a[i++]; else tmp[k++] = a[j++]; } while (i <= q) // copy 剩余部分 tmp[k++] = a[i++]; while (j <= r) tmp[k++] = a[j++]; for (i = p; i <= r; i++) // 将排序好的部分复制回原数组 a[i] = tmp[i];}void showSeq(int a[], int n){ int i = 0; while (i < n) printf("%d ", a[i++]); putchar('\n');}
0 0
- 算法基础3:归并排序(Merge Sort)
- 归并排序(Merge sort)算法
- 归并排序(Merge sort)算法
- 【算法】归并排序 merge sort
- 归并(Merge Sort)排序算法
- 算法-归并排序(Merge-Sort)
- 排序算法系列:归并排序(Merge sort)(C语言)
- 排序算法(二)—归并排序(Merge sort)
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 【排序算法】 归并排序 merge sort
- 归并排序(merge sort)
- 归并排序(merge sort)
- 归并排序(merge sort)
- 归并排序(Merge Sort)
- 归并排序(merge sort)
- C#学习笔记之数组参数与参数数组
- 被撕裂的中国三
- ES6值得关注的点
- 解决Android Studio:一直处于Gradle:Reslove dependencies ':classpath'中
- ajax 实现页面加载和内容的删除
- 算法基础3:归并排序(Merge Sort)
- SDNU ACM-ICPC 2016-2017 Training Weekly Contest 2 【--完结--】
- LeetCode刷题【Array】 Two Sum
- 被撕裂的中国二
- AWS和Azure频频中断,可靠性让公有云成为带刺的玫瑰
- hive 解析日志常用的几个函数
- 数组倒叙
- 被撕裂的中国一
- 想用C++实现一个软件渲染器