直接插入排序:改进算法---折半插入排序
2011-09-27 20:24
369 查看
这种改进是从比较次数入手的,并没用减少移动的次数
# include <stdio.h> # define MAXSIZE 20 typedef int KeyType; typedef struct { KeyType r[MAXSIZE+1]; int length; }SqList; void CreateSqList(SqList &L) { int i,n; printf("请输入待排序数据的长度:"); scanf("%d",&n); printf("请输入待排序的数据:"); for (i=1;i<=n;i++) { scanf("%d",&L.r[i]); } L.length = n; } void Display(SqList &L) { int i; for (i=1; i<=L.length; i++) { printf("%d ",L.r[i]); } printf("\n"); } void InserSort(SqList &L) { int i,j; int low,high,mid; for (i=2; i<=L.length; ++i) { L.r[0] = L.r[i];//待插入的数据复制为哨兵 low = 1; high = i-1; while (low <= high) { mid = (low+high)/2; if (L.r[0] < L.r[mid]) { high = mid-1; } else { low = mid+1; } } for (j=i-1; j>=high+1; --j) { L.r[j+1] = L.r[j]; } L.r[high+1] = L.r[0]; printf("第%d趟排序结果为: ", i-1); Display(L); } } int main(void) { SqList L; CreateSqList(L); InserSort(L); printf("最后的排序结果是:"); Display(L); return 0; }
相关文章推荐
- 直接插入排序:改进算法---2路插入排序
- 直接插入排序、折半插入排序、冒泡排序、快速排序的算法实现
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- java实现排序算法之2-路插入排序,直接插入排序,折半插入排序
- 第十六周 项目1 验证算法 直接插入排序 折半插入排序
- 第十六周上机实践—项目1(1)—验证算法 直接插入排序 折半插入排序
- 改进版直接插入排序
- 算法---直接插入排序
- 第十五周项目1-验证算法(2)-直接插入排序
- 第16周项目1-验证算法(1)直接插入排序
- 各种排序算法汇总(插入排序:直接插入排序、折半插入排序、希尔排序)
- 8种经典算法之直接插入排序
- 第十六周项目1-验证算法-直接插入排序
- [算法学习笔记]直接插入排序笔记
- 白话经典算法系列之二 直接插入排序的三种实现
- OC下的冒泡排序,直接插入排序,折半插入排序
- 第十六周 项目 1 - 验证算法之(1)直接插入排序
- 第十六周 项目一 验证算法(1) 直接插入排序
- 第16周项目1-验证算法(1)直接插入排序
- 第十六周项目(1):验证算法1——直接插入排序