2-路插入排序
来源:互联网 发布:mobi编辑软件 编辑:程序博客网 时间:2024/06/05 11:02
2-路插入排序
2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间。并记录辅助空间内最大元素和最小元素的位置。将待插入的元素与最大元素和最小元素继续比较,从而决定然后排序;
# include <stdio.h>void TwoInsertSort(int *Array, int Length){ int TempArray[Length]={0};//辅助数组,用来暂存数组元素 此数组为循环数组 int start = 0, end = 0;//记录辅助数组中最小元素和最大元素的位置 int j, i; TempArray[0] = Array[0];//向辅助数组预先插入一个元素 for(i = 1; i < Length; i++){//从数组Array[1]开始排序 if(Array[i]>TempArray[end]){//如果数组Array[i]>比辅助数组中最大的元素大 end++; TempArray[end] = Array[i]; } else if(Array[i] < TempArray[start]){//如果数组Array[i]>比辅助数组中最小的元素小 start = (start+Length-1)%Length; TempArray[start] = Array[i]; }else{//大于最小值,小于最大值 j = end++; while(TempArray[j]>Array[i]){ TempArray[(j+1)%Length] = TempArray[j]; j = (j+Length-1)%Length; } TempArray[j+1] = Array[i]; } //每次排序后的结果 printf("第%d次排序:\n", i); for(int j = 0; j<Length; j++){ printf("%d ", TempArray[j]); } printf("\n"); } printf("排序后最终结果:\n"); for(int i = 0; i < Length; i++){ Array[i] = TempArray[start]; start = (start+1)%Length; } for(int i = 0; i<Length; i++){ printf("%d ", Array[i]); } return ;}int main(void){ int a[] = {49, 38, 65, 97, 76, 13, 27, 49}; int n = 8; TwoInsertSort(a, n); return 0;}
阅读全文
0 0
- 插入排序--2路插入排序
- 插入排序之2路插入排序
- 插入排序(直接插入排序,折半插入排序,2路插入排序,希尔排序)
- 插入排序(直接插入排序,折半插入排序,2路插入排序,希尔排序)
- //插入排序 直接插入排序 二分插入排序 2-路插入排序 表插入排序 希尔排序
- 2路插入排序
- 2路插入排序
- 2路插入排序
- 2-路插入排序
- 2-路插入排序
- 2-路插入排序
- 2-路插入排序
- 2路插入排序
- 2-路插入排序
- 2-路插入排序
- 插入排序(直接插入排序,折半插入排序,2路插入排序)
- 排序3:插入排序(2路插入排序)
- 直接插入排序,折半插入排序,2-路插入排序,希尔排序
- Android数据传输加密(三):RSA加密
- 批处理自动备份命令
- @Scope("prototype")
- Android官方架构组件介绍之LifeCycle
- Android通过WebView与JS交互的全面方式
- 2-路插入排序
- iOS逆向 开发工具
- 面向对象设计模式的原则与分类
- php阿里大于thinkphp5基本配置与使用
- oracle查看数据库连接池中最大连接数和当前用户连接数等信息
- SAP PI
- MySQL常用操作
- zlib中的compress压缩操作-C语言学习笔记6
- upstream,proxy,nginx的模块