排序--折半插入

#include<iostream>
using namespace std;
#define SIZE 21
typedef int Sqlist[SIZE];

void BInsertSort(Sqlist &L,int n)
{
	int i,j;
	int low;
    int high;
	int mid;
   for(i=2;i<n;++i)   
   {
      L[0] = L[i];
      low = 1;   
	  high = i;    
	  while(low <= high) 
	  {
	    mid = (low + high)/2;  
		if(L[0] > L[mid])
			low = mid+1;      
		else
			high = mid-1;    
	  }
	  for(j = i;j > high+1 ;--j) 
	  {
	    L[j] = L[j-1];     
	  }
	  L[high+1] = L[0];
   }
}
void main()
{
	Sqlist L= {0,49,38,65,97,76,13,27};
	BInsertSort(L,8);
	for(int i=1;i<8;++i)
	  cout<<L[i]<<" ";
	cout<<endl;
}


分析:折半插入排序法相对于直接插入法,减少了比较的次数,但是没有减少移动的次数,没有很好的优化直接插入法。

相关文章
相关标签/搜索