排序算法总结---直接插入排序

直接插入排序的过程是:

1.将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录;

2.将无序区的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录;

3.重复执行第二步,直到无序区中没有记录为止。

第一步的解决:

将第一个记录看成是初始有序区,然后从第二个记录起依次插入到这个有序区中,直到将第len个记录插入完毕,算法描述为:

for(i=1;i<len;i++)
{
//插入第i个记录
}

第二步的解决:

一般情况下,在i-1个记录的有序区array[0]~array[i-1]中插入一个记录array[i]时,首先要查找array[i]的正确插入位置。最简单的,可以采用顺序查找。将array[i]的值给一个临时变量temp。在自i-1起往前查找的过程中,同时后移记录。

int temp = array[i];
		for (j = i - 1; j>=0&&temp< array[j]; j--)
			array[j + 1] = array[j];
		array[j + 1] = temp;

退出循环,说明找到了插入的位置,因为array[j]刚刚比较完毕,所以,j+1为正确的插入的位置,将待插记录插入到有序表中。即:

array[j + 1] = temp;

算法和测试代码如下:

#include <iostream>
#include <cstdlib>

using namespace std;


void InsertSort(int *array, int len)
{
	if (array == NULL || len<0)
	{
		return;
	}
	int i, j;
	for (i = 1; i < len;i++)
	{
		int temp = array[i];
		for (j = i - 1; j>=0&&temp< array[j]; j--)
			array[j + 1] = array[j];
		array[j + 1] = temp;
	}
}

void show(int *array, int len)
{
	for (int i = 0; i < len;i++)
	{
		cout << array[i] << "  ";
	}
	cout << endl;
}
void main()
{
	int array[] = {7,6,5,4,3,2,1,-1};
	int len = sizeof(array) / sizeof(array[0]);
	InsertSort(array, len);
	show(array, len);
	system("pause");
}





直接插入排序的最好的时间复杂度为O(n),最差和平均的时间复杂度为O(n*n),空间复杂度为O(1)

直接插入排序是一种稳定的排序的方法。

适用:

当序列中的记录基本有序或者待排序记录较少时,它是最佳的排序的方法。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值