插入类排序
来源:互联网 发布:highcharts.js 下载 编辑:程序博客网 时间:2024/04/29 00:21
~~无论是查资料、翻书、自己总结,总之记了很多笔记,以后慢慢将它分享出来~~
void directInsertSort(int array[],int length)
{
for (int i=2; i<=length; i++)
{
array[0]=array[i];//记录Ki
int j=i-1;
for (; array[j]>array[0]; j--)//条件中当j=0时,array[j]>array[0]自然不成立
{
array[j+1]=array[j];//如果该记录大于Ki则后移
}
array[j+1]=array[0];//上一步条件判断失败时j多走了一个,因此插入到j+1
}
}
void binaryInsertSort(int array[],int length)
{
for (int i=2; i<=length; i++)
{
array[0]=array[i];
int low=1,hight=i-1,mid;
while (low<=hight)//此处通过折半查找的方式确定要插入的位置,而不是顺序比较
{
mid=(low+hight)/2;
if (array[0]<array[mid])//若当前记录小于中间位置的记录则heigh缩小
{
hight=mid-1;
}
else//否则low缩小
{
low=mid+1;
}
}
//while执行完,low则为要插入的位置,即low之后的记录的关键字都比low位置的大
for (int j=i-1; j>=low; j--)//前一步已经找出要插入的位置,因此这里直接将比往后移动
{
array[j+1]=array[j];
}
array[low]=array[0];
}
}
//希尔排序
void ShellInsert(int array[],int length,int d)
{
for (int i=d+1; i<=length; i++)//从增量d划分的第一个子序列的第二个记录开始,顺序扫描整个待排序列,对每个扫描到的记录在其所在的子序列进行直接插入排序
{
array[0]=array[i];
int j=i-d;//当前记录所在子序列的前一个记录
for (; j>0&&array[0]<array[j]; j=j-d)//j=j-d有可能直接跳过j=0,因此需要加上j>0这个条件
{
array[j+d]=array[j];
}
array[j+d]=array[0];
}
}
void ShellSort(int array[],int length)
{
int d=length/2;//初始增量设为数组长度的一半
while (d>=1)
{
ShellInsert(array, length, d);//每次调用,即为一趟排序
d=d/3;//增量每次除以3递减
}
}
- 排序---插入类排序
- 排序-插入类排序
- 排序-插入类排序-直接插入排序
- 排序-插入类排序-折半插入排序
- 插入类排序:插入排序&希尔排序
- 插入类----直接插入排序
- 插入类------二分插入排序
- 插入类排序----直接插入排序
- 1. 排序-插入类排序
- 五类插入排序
- 插入类排序
- 插入类排序
- 插入类-----希尔排序
- 插入类排序
- 内排序-插入类排序-希尔排序
- 插入排序类:直接插入排序和希尔排序
- 内排序-插入类排序-直接插入排序
- 【排序算法】 插入排序 insertion sort(插入类排序)
- Ruby--访问MySql数据库
- File文件类的使用
- 模板方法模式的结构
- KMP算法计算next数组 匹配字符串
- 微信小程序 二 选项卡
- 插入类排序
- android studio打开已有项目或者构建新项目时更新gradle
- 378. Kth Smallest Element in a Sorted Matrix
- Android ABI 概念
- E. Ice cream coloring (图论 染色 DFS)
- es6-Map
- xbin目录及toolbox,toybox
- Shell for循环
- ECMAScript 6(14)函数的扩展(3)——严格模式、name、箭头函数、尾递归