排序的一种高效实现:分治排序与插入排序混合使用
来源:互联网 发布:华为公司bcg矩阵分析 编辑:程序博客网 时间:2024/06/05 19:09
用C语言实现的分治法与排序法的混合使用,使排序更为合理,高效。
/************************************************************** * Sort.h * * To sort numbers by mixing of INSERTION_SORT and MERGE_SORT * * by Eric Brown * **************************************************************/ #ifndef MIX_SORT#define MIX_SORT#define MIN_NUM 10#define MAX_NUMBER 10000void merge(int num[], int p, int q, int r);void insertion_sort(int num[], int p, int r);void merge_sort(int num[], int p, int r);#endif
/************************************************ * Sort.c * * by Eric Brown * ************************************************/ #include"Sort.h"void merge(int num[], int p, int q, int r) { int n1 = q - p + 1, n2 = r - q, i, j, k; int L[n1 + 1], R[n2 + 1]; for(i = 0; i < n1; i++) L[i] = num[p + i]; L[n1] = MAX_NUMBER; for(i = 0; i < n2; i++) R[i] = num[q + 1 + i]; R[n2] = MAX_NUMBER; i = 0; j = 0; for(k = p; k <= r; k++){ if(L[i] < R[j]){ num[k] = L[i]; i++; }else { num[k] = R[j]; j++; } }}void insertion_sort(int num[], int p, int r) { int key, i, j; for(i = p; i <= r; i++) { key = num[i]; j = i; while(num[j] > key) { num[j] = num[j - 1]; j--; } num[j] = key; }}void merge_sort(int num[], int p, int r) { int q; if(p < r) { q = (p + r) / 2; merge_sort(num, p, q); merge_sort(num, q+1, r); merge(num, p, q, r); }else { insertion_sort(num, p, r); }}
/********************************************* * main.c * * just a test * * * *********************************************/ #include<stdio.h>#include<stdlib.h>#include"Sort.h"#define N 20int main(void) { int num[N], i; printf("Please input %d numbers to sort:\n", N); for(i = 0; i < N; i++) scanf("%d", &num[i]); merge_sort(num, 0, N); for(i = 0; i < N; i++) printf("%d ", num[i]); printf("\n"); system("pause"); return 0;}
- 排序的一种高效实现:分治排序与插入排序混合使用
- 高效的插入排序
- 插入排序的一种递归法实现
- 插入排序和分治排序
- qsort与插入排序混合优化
- 排序第一站,插入排序与分治算法
- 三中值和插入排序混合实现快速排序
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 插入排序的实现
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)
- 插入排序的一种尾递归实现-C
- tar时出现“目录校验和错误”
- jPBM4.3 -- 第一节 配置开发环境
- linux TC命令使用总结
- 【2013微软校招面试题】求给定的一个字符串最小需要添加多少个字符才能成为回文串
- 将普通表转变为分区表
- 排序的一种高效实现:分治排序与插入排序混合使用
- Android设置图片为手机壁纸,并且全屏显示。
- 递归求解字符串长度
- jffs2根文件系统与uimage内核
- ExtractStrings函数分割字符串详解
- 重复内容删除的小脚本
- AABB包围盒算法
- SLA 服务等级协议 - 2
- java基础要点(8)面向对象-多态