归并排序(c语言)
来源:互联网 发布:微信预约排号系统源码 编辑:程序博客网 时间:2024/06/05 20:58
#include <stdio.h>#include <time.h>#include <stdlib.h>#define max 10void merge_sort(int a[], int p, int r);void merge(int a[], int p, int q, int r);int main() { int array[max]; int i; srand((unsigned)time(NULL)); for (i = 0; i < max; i++) { array[i] = rand() % 90 + 10; } printf("unsorted array: "); for (i = 0; i < max; i++) { printf("%d ", array[i]); } printf("\n"); merge_sort(array, 0, 9); for (i = 0; i < max; i++) { printf("%d ", array[i]); } printf("\n"); return 0;}void merge(int a[], int p, int q, int r) { int i, j, k, n1, n2; int *front, *back; n1 = q - p + 1; n2 = r - q; front = (int *)malloc(n1 * sizeof(int)); back = (int *)malloc(n2 * sizeof(int));//申请两个动态内存空间 for (i = 0; i < n1; i++) { front[i] = a[p + i]; } for (i = 0; i < n2; i++) { back[i] = a[q + i + 1]; } i = 0; j = 0; k = p; while (i < n1 && j < n2) { if (front[i] < back[j]) { a[k++] = front[i++]; } else { a[k++] = back[j++]; } } while (i < n1) { a[k++] = front[i++]; } while (j < n2) { a[k++] = back[j++]; }}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); }}
归并模型!
void merge(int a[], int p, int q, int r) { int i, j, k, n1, n2; int *front, *back; n1 = q - p + 1; n2 = r - q; front = (int *)malloc(n1 * sizeof(int)); back = (int *)malloc(n2 * sizeof(int));//申请两个动态内存空间 for (i = 0; i < n1; i++) { front[i] = a[p + i]; } for (i = 0; i < n2; i++) { back[i] = a[q + i + 1]; } i = 0; j = 0; k = p; while (i < n1 && j < n2) { if (front[i] < back[j]) { a[k++] = front[i++]; } else { a[k++] = back[j++]; } } while (i < n1) { a[k++] = front[i++]; } while (j < n2) { a[k++] = back[j++]; }}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); }}
运用分治的思想,时间复杂度始终为o(nlogn)
0 0
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序(c语言)
- 归并排序C语言
- 归并排序C语言
- C语言 归并排序
- 归并排序(C语言实现)
- 归并排序(C语言版本)
- 归并排序 C语言数据结构
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序C语言代码
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- C语言之归并排序
- 基于按annotation的hibernate主键生成策略
- 零基础学习sql(7) 序列
- Android Studio 出现非法字符 'ufeff'错误
- 上传图片(jpeg, png各种类型), 及视频
- windows下安装python包管理器pip
- 归并排序(c语言)
- VS2012 + IIS Web 发布(三)——网站发布
- java 堆栈的简单知识
- ANDROID VIEWDRAGHELPER源码解析
- memcache spring cache 关键点
- 栈和队列之生成窗口最大值数组
- 异常处理:Unable to instantiate Action, checkLoginAction, defined for 'checkUser' in namespace '/'Error
- KERNEL32.dll动态链接库报错解决方法
- 安卓开发