归并排序
来源:互联网 发布:排课系统算法 编辑:程序博客网 时间:2024/05/01 10:55
#include <stdio.h>#include <stdlib.h>#define INFINITY 0xffff// p <= q < rvoid Merge(int *A, int p, int q, int r){int m = q - p + 1; // m >= 1int n = r - q; // n >= 1int *L = (int *)malloc((m + 1) * sizeof(int)); int *R = (int *)malloc((n + 1) * sizeof(int));for (int i = 0; i < m; i++)L[i] = A[p + i];for (int j = 0; j < n; j++)R[j] = A[q + 1 + j];L[m] = INFINITY; // 设置一个哨兵,简化了比较R[n] = INFINITY;int i = 0;int j = 0;for (int k = p; k <= r; k++) {if (L[i] <= R[j]) {A[k] = L[i++];} else {A[k] = R[j++];} }free(L);free(R);}void Merge1(int *A, int p, int q, int r){int m = q - p + 1; // m >= 1int n = r - q; // n >= 1int *L = (int *)malloc(m * sizeof(int)); int *R = (int *)malloc(n * sizeof(int));for (int i = 0; i < m; i++)L[i] = A[p + i];for (int j = 0; j < n; j++)R[j] = A[q + 1 + j];int i = 0;int j = 0;int k = p;while (i < m && j < n) {if (L[i] <= R[j]) {A[k++] = L[i++];} else {A[k++] = R[j++];}} while (i < m) { A[k++] = L[i++];}while (j < n) {A[k++] = R[j++];}free(L);free(R);}void MergeSort(int *arr, int p, int r){if (p < r) {int q = (p + r) / 2;MergeSort(arr, p, q);MergeSort(arr, q + 1, r);Merge1(arr, p, q, r);}}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Linux生成动态链接库的-fPIC参数问题
- poj 2135 Farm Tour
- Double
- mysql存储过程
- webpy+uploadify实现文件异步上传
- 归并排序
- QFE23xx揭秘:最强大的Qualcomm RF360前端芯片——更多频带,更多模式,更小的PCB尺寸
- spss Clementine12 破解方法
- POJ 2186 Popular Cows -- tarjan 缩点
- 使用jquery.upload.js实现异步上传
- api文件名
- crontab详解
- 0-1背包问题回溯法
- c++操作sqllite