题目
思路
正常二分
代码
#include<bits/stdc++.h>
using namespace std;
int res[10001] = { 0 };
void BSort(int a[], int n)
{
for (int i = 1; i < n; i++)
{
int x = a[i];
int left = 0;
int right = i - 1;
int mid;
//cout << "i=" << i << ' ' << "x=" << x << endl;
while (left<=right)
{
res[i]++;
mid = (left + right) / 2;
//cout << mid << endl;
if (a[mid] > x)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
//cout << "left,right=" << left << ' ' << right << endl;
for (int j = i; j > left; j--)
a[j] = a[j - 1];
a[left] = x;
for (int m = 0; m < n; m++)
cout << a[m] << ' ';
cout << endl;
}
}
int main()
{
int n; cin >> n;
int* a = new int[n + 1];
for (int i = 0; i < n; i++)
cin >> a[i];
BSort(a, n);
for (int i = 1; i < n; i++)
cout << res[i] << endl;
return 0;
}