插入排序
Posted 宣哲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序相关的知识,希望对你有一定的参考价值。
插入排序
插入排序就是一个数和一个已序的序列进行插入,组成新的已序序列
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。
在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序序列进行待插入位置查找,并进行移动。
插入排序的流程:
未优化代码:
第一层循环是循环有序序列。第二层循环是循环无序序列,无序序列的第一个依次和有序序列进行比较,再插入到合适的位置,如果无序序列待插入元素比有序序列元素大则跳出循环。
void insert_sort(int parr[], int n)
for (int i = 1; i < n; ++i) //保证循环次数
for (int j = i - 1; j >= 0; --j)//保证比较次数
if (arr[j] > arr[j+1])
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
else //如果待插入元素比有序序列的元素大则跳出循环
break;
优化代码示例:
优化主要思想:因为是数组,所以可以把交换换成赋值(覆盖)。同时满足2个条件就插入,否则就不进入循环
void insert_sort(int parr[], int len) //插入排序
int j,tempval;
for (int i = 1; i < len; ++i)
tempval = parr[i]; //保存待插入的值
j = i - 1;
while (j >= 0 && tempval < parr[j]) //待插入的值比有序序列值小
parr[j + 1] = parr[j]; //将有序序列的值往后移
--j;
parr[j + 1] = tempval; //将保存的值插入到有序序列中
以上是关于插入排序的主要内容,如果未能解决你的问题,请参考以下文章
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚