【算法】Python & C++实现排序算法(三)之直接插入排序

1、直接插入排序
插入排序的原理与整理扑克牌类似,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。【适用于某些记录数据本身存在有序,且其中少量需要排序,此时使用该中算法效果较好,快速

2、具体分析

  1. 从数列第一个元素开始,约定该元素已经排好序
  2. 取下一个元素,约定为待插入元素,在已经排序的元素序列中从后向前扫描,如果发现插入元素小于该元素,则将该元素位置后移一位。
  3. 重复步骤2,直到找到已排序的元素小于或者等于待排序元素的位置,插入元素
  4. 重复2,3步骤,完成排序。
    现在以具体【2,1,6,3,5】为例,首先以数列首元素为目标,认为其已经排好序。【【2】,1,6,3,5】
    第一轮:1<2;因此2需后移1位【【1,2】,6,3,5】
    第二轮:6>2,所以不变
    第三轮:3<6,交换【【1,2,3】,6,5】,3>2不变
    第四轮:5<6,交换【1,2,3,5】,6】,5>3不变【1,2,3,5,6】完成数列排序。

3、代码实现

/*
作者:kimicr
时间:20200327
功能:直接插入排序
特点:时间复杂度【n^2】
*/

#include"iostream"
#include"Sort.h"
using namespace std;


void InsertSort(int *array, int length)
{
    
    
	for (int i = 1; i < length; i++)
	{
    
    
		int temp = array[i];
		int j;
		for (j = i - 1; j >= 0&&temp < array[j]; j--)
		{
    
    

			//SWAP(array, j, j + 1);       //这种方式,会有许多无意义交换产生,不推荐。
			array[j + 1] = array[j];    //大于插值的数往后移动一位
										//然后j减一,继续与插数比较,若任然大于则重复上述过程,否则退出
		}
		array[j+1] = temp;  //退出循环后,将插值放入正确位置	

	}
}

猜你喜欢

转载自blog.csdn.net/qq_32643313/article/details/105156727