#include<iostream>
using namespace std;
void binaryinsertsort(int a[], int n)
{
int i, j, key;
for (i = 1; i <n; i++)//i<n 否则n+1越界
{
if (a[i] < a[i - 1])
{
key=a[i];
int low = 0, high = i-1;//high是已经排好序的序列里的最后一个元素 因为i++ 所以high=i-1
while (low <= high)
{
int mid = (low + high) / 2;
if (a[mid] > key)
high = mid - 1;
else low = mid + 1;
}
for (j = i - 1; j >= low; j--)
{
a[j + 1] = a[j];
}
a[low] = key;//找到插入位置 a[high+1]=key;
}
}
}
int main()
{
int arr[8] = {6,0,5,2,8,7,10,18 };
cout << "折半插入排序之后:" << endl;
binaryinsertsort(arr, 8);
for (int i = 0; i < 8; i++)
{
cout << arr[i] << " ";
}
return 0;
}`
折半插入排序
最新推荐文章于 2024-09-30 13:43:16 发布