折半插入排序代码

//arr:关键字
//n:关键字个数
void BInsertSort(int arr[],int n)
{
	int temp,i,j,low,high,mid;
	//i从1开始,将arr[0]视作有序序列
	for(i = 1; i <=n; ++i)
	{
		temp = arr[i];
		//low和high分别指向有序序列的首部和尾部
		low = 0;
		high = i-1;
		//折半查找
		while(low <= high)
		{
			mid = (low + high)/2;
			//如果有序序列中部的关键字比要插入的关键字大
			if(arr[mid] > temp) 
			//则插入点在低半区,将high调整到低半区
				high = mid - 1;
			else 
			//否则插入点在高半区,将low调整到高半区
				low = mid +1;
		}
		//将high之后的关键字全部后移一位
		for(j = i-1; j >= high + 1;j--)
			arr[j+1] = arr[j];
		//关键字插入点在high指向的关键字后边
		arr[high + 1] = temp;
		
	}
}

你可能感兴趣的:(数据结构,数据结构)