算法导论 之 归并排序[C语言]
来源:互联网 发布:企业域名保护 编辑:程序博客网 时间:2024/04/28 08:06
一、算法实现
归并排序的时间复杂度为O(nlgn),其代码实现如下:
int merge_sort(int *array, int min, int max){int mid = (min+max)/2;if(max <= min) return 0;merge_sort(array, min, mid);merge_sort(array, mid+1, max);merge(array, min, mid, max);return 0;}
int merge(int *array, int min, int mid, int max){int i=0, j=0, idx=0;int lnum = mid-min+1, rnum = max-mid;char *L=NULL, *R=NULL;L = calloc(1, lnum*sizeof(int));if(NULL == L){return -1;}R = calloc(1, rnum*sizeof(int));if(NULL == R){return -1;}/* Set L and R array */for(i=0; i<lnum; i++){L[i] = array[min+i];}for(j=0; j<rnum; j++){R[j] = array[mid+1+j];}/* Sort */i = 0;j = 0;idx = min;while(i<lnum && j<rnum){if(L[i] <= R[j]){array[idx++] = L[i++];}else{array[idx++] = R[j++];}}if(i < lnum){for(; i<lnum; i++){array[idx++] = L[i];}}else{for(; j<rnum; j++){array[idx++] = R[j];}}free(L), L=NULL;free(R), R=NULL;return 0;}二、函数调用
#define ARRAY_NUM (10)int main(int argc, void *argv[]){int idx=0;int array[ARRAY_NUM] = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};merge_sort(array, 0, ARRAY_NUM-1);for(idx=0; idx<ARRAY_NUM; idx++){fprintf(stdout, "array[%d] = %d\n", idx, array[idx]);}return 0;}
- 算法导论 之 归并排序[C语言]
- 【算法导论】归并排序,C语言实现
- 归并排序的c语言代码--算法导论一致
- 算法导论 - 归并排序的 C 语言实现
- 归并排序的C语言实现【严蔚敏+算法导论】
- 算法导论中的归并排序C语言实现
- 算法导论之归并排序
- 算法导论 之 插入排序[C语言]
- 算法导论 之 冒泡排序[C语言]
- 算法导论 之 堆排序[C语言]
- 算法导论 之 希尔排序[C语言]
- 算法导论 之 快速排序[C语言]
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 【算法导论】第二章之归并排序
- 算法导论学习之归并排序
- 算法导论之二归并排序法
- 《算法导论》读书笔记之归并排序
- 算法导论第二章之归并排序
- 概率论与数理统计学习笔记一:事件的概率
- 云端GPS新技术 可节省99.96%的电力消耗
- 最新计算机技术能区分人类笑容的真伪
- 世界首款骨传导蓝牙立体声耳机问世
- 德国科学家用双音素改进人工语音表达
- 算法导论 之 归并排序[C语言]
- 数据挖掘打破美国总统竞选的铁律
- CG实验2nd&3rd:二维几何变换、裁减、动画、三维透视
- 我眼中的工程师文化
- 转 python简易教程
- JAVA基础知识梳理(二)
- 程序实现Win8任务管理器中的获取进程操作系统上下文
- cv研究广有前景
- 我栋楼几个人共享上网,别人过量占用带宽,平均分网速