折半插入排序


之間介紹插入排序時漏掉一種插入方式,那就是折半插入。 這種方式是采用二分查找法去查找插入點,可以減少元素比較次數,但是並不能減少移動次數,復雜度跟直接插入一樣,都為O(n^2).

直接上代碼:

//二分插入排序
void binary_insert_sort(int arr[],int len)
{
if(arr == NULL || len <= 1)
{
return;
}
int i,j;
for(i = 1; i < len; i++)
{
int low = 0,high = i-1;
int target = arr[i];
while(low <= high)
{
int middle = low + ((high - low)>>1);
if(arr[middle] > target)
{
high = middle-1;
}else
{
low = middle+1;
}
}
//low的位置正好是插入點
//i與low之間的元素后移一位(不包括i)
for(j = i; j>low; j--)
{
arr[j] = arr[j-1];
}
//將target插入到正確位置
arr[low] = target;
}
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: