数据结构基础(7)------------插入排序

数据结构基础(7)------------插入排序
1. 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。

2.如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数减去(n-1)次。平均来说插入排序算法复杂度为O(n2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。 插入排序在工业级库中也有着广泛的应用,在STL的sort算法和stdlib的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序(通常为8个或以下)。
void InsertSort(int *a,int length)  
{
	for (int j=1;j<length;++j)       //从第二个数开始,进行遍历
	{
		int key=a[j];            //key为当前值
                int i=j-1;               //i为当前前一个值的下标
                if(a[i]>a[j])
                { 
                    while (i>=0 && a[i]>key) //如果没有到达第一个元素,并且前一个值大于当前的key值,则此值后移
		    {
			a[i+1]=a[i];
			--i;             //i自减,从而i指向前一个值
		    }
		    a[i+1]=key;              //将key值放在a[i]<=key的后面的那个位置,a[i+1]即可;
                 }	
	}
}


int _tmain(int argc, _TCHAR* argv[]){int a[30];for (int i=0;i<30;++i){a[i]=100-i;}InsertSort(a,30);for (int i=0;i<30;++i){cout<<a[i]<<endl;}cout<<endl;system("pause");return 0;}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值