写的比较简单,欢迎转载,注明出处
插入排序算法
插入排序算法基本思路大体一样,都是往有序的序列里面插入新的元素。
查找插入位置------移动元素----插入新元素。根据查找的方式不同,可以分为直接插入排序和二分插入排序。
- 直接插入排序
直接插入排序算法是,将待插入的新元素,直接和有序序列中的元素挨个比较,找到插入位置,然后插入。
以下是示例代码,lenth:是待排序序列长度,这里用的是int类型的数组作为待排序序列作为演示。
void DirectSort(int *pnArr, int length)
{
for (int i=1; i<length; i++)
{
int nTmp = pnArr[i];
for (int j=i-1; j>=0 && pnArr[j] > nTmp; j--) // 查找位置
{
pnArr[j+1] = pnArr[j]; // 移动元素
}
pnArr[j+1] = nTmp; // 插入元素
}
}
- 二分查找插入排序
二分查找排序算法和直接插入排序思路一样,除了查找方式变成二分法查找,其他的一样,都需要找到插入位置以后,移动相应的元素,然后插入。
以下是二分查找插入排序的示例代码。
void BiSearchSort(int *pnArr, int length)
{
for (int i=1; i<length; i++)
{
int nLow = 0, nHigh = i-1;
int nCenter = 0;
int nTmp = pnArr[i];
while (nLow<=nHigh) // 二分法查找位置
{
nCenter = (nLow + nHigh) / 2;
if (pnArr[nCenter] > nTmp)
{
nHigh = nCenter-1;
}
else
{
nLow = nCenter + 1;
}
}
for (int j=i-1; j>=nLow; j--)
{
pnArr[j+1] = pnArr[j]; // 移动元素
}
pnArr[nLow] = nTmp; // 插入元素
}
}
简单测试代码,如下。
int main()
{
int s[LENGTH] = {8, 7, 6, 5, 4, 3, 2, 1};
//DirectSort(s, LENGTH);
BiSearchSort(s, LENGTH);
for(int i=0; i<LENGTH; i++)
{
std::cout<< s[i] << std::endl;
}
return 0;
}
之后有时间再详细更新吧,如果可以的话加上图片说明
最后
以上就是要减肥硬币最近收集整理的关于插入排序算法简介插入排序算法的全部内容,更多相关插入排序算法简介插入排序算法内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复