插入排序
插入排序
插入排序就是一个数和一个已序的序列进行插入,组成新的已序序列
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。
在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序序列进行待插入位置查找,并进行移动。
插入排序的流程:
未优化代码:
第一层循环是循环有序序列。第二层循环是循环无序序列,无序序列的第一个依次和有序序列进行比较,再插入到合适的位置,如果无序序列待插入元素比有序序列元素大则跳出循环。
void insert_sort(int arr[], 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; //将保存的值插入到有序序列中
}
}