插入排序

插入排序

插入排序就是一个数和一个已序的序列进行插入,组成新的已序序列

插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。

在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序序列进行待插入位置查找,并进行移动。

插入排序的流程:

未优化代码:

第一层循环是循环有序序列。第二层循环是循环无序序列,无序序列的第一个依次和有序序列进行比较,再插入到合适的位置,如果无序序列待插入元素比有序序列元素大则跳出循环。

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;	//将保存的值插入到有序序列中
	}
}
posted @ 2022-03-04 20:16  宣哲  阅读(384)  评论(0编辑  收藏  举报