int BinSearch(int a[], int n, int k)
{
int left = 0, right = n - 1;
int mid = (left + right) / 2;
if (k < a[left])
{
return left;
}
if ( k > a[right])
{
return right + 1;
}
while (left < right && !(a[mid] < k && a[mid+1]>k))
{
if (a[mid] < k)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
mid = (left + right) / 2;
}
mid++;
return mid;
}
void BinSort(int a[], int n)
{
int k,x;
for (int i = 1; i < n; i++)
{
k = a[i];
x = BinSearch(a, i, k);
for (int j = i-1; j >=x; j--)
{
a[j + 1] = a[j];
}
a[x] = k;
}
}
int main()
{
int bb[] = { 4, 6, 7, 1, 2, 9, 3};
BinSort(bb, 7);
return 0;
}
二分法排序
最新推荐文章于 2024-09-26 16:50:25 发布