插入排序分析及优化

插入排序是一个简单的原址排序,对于少量的元素,这是一个有效的算法。也常用来对快排做元素较少时的优化选择。


伪代码描述:

            INSERTION-SORT(A)

            for j=2 to A.length

                   key=A[j]

                   i=j-1;

                   while i>0 and A[i]>key

                            A[i+1]=A[i]

                            i=i-1

                    A[i+1]=key


 图解:

   插入排序分析及优化_第1张图片

   C++代码:


  

void insertSort(vector<int> &vec)
{
	for(int j=1;j<=vec.size()-1;++j){
		auto key=vec[j];
		int i=j-1;
		while(i>=0&&vec[i]>key){
			vec[i+1]=vec[i];
			i=i-1;
		}
		vec[i+1]=key;
	}
}
 
 
优化版本1,没有太大改进,只是减少for循环中的赋值语句,对于十万数据量,基本版本为14秒,改进后为13.5秒
 
 
<pre name="code" class="cpp">void insertSort2(vector<int> &vec)
{
	int len=vec.size();
	int i,j;
	for(j=1;j<len;++j){
		int key=vec[j];
		for(i=j-1;i>=0&&vec[i]>key;--i){
			vec[i+1]=vec[i];
		}
		vec[i+1]=key;
	}

}


 
 

你可能感兴趣的:(插入排序分析及优化)