#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <stack>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair<int, int> PINT;
const int inf = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int maxn = 3000;
int a[100];
int main()
{
int n = 8;
for (int i=1;i<=n;i++) {
cin >> a[i];
}
for (int i=2;i<=n;i++) {
a[0] = a[i];
// for (int j=i-1;j>=0;j--) {
// if (a[j] > a[0]) {
// a[j+1] = a[j];
// } else {
// a[j+1] = a[0];
// break;
// }
// }
int l = 1, r = i-1;
while (l <= r) { // 在有序数组中找到不超过a[0]的最大位置, 为l
int mid = (l + r) >> 1;
if (a[0] < a[mid]) {
r = mid-1;
} else {
l = mid+1;
}
}
for (int j=i-1;j>=l;j--) { // 元素循环后移
a[j+1] = a[j];
}
a[l] = a[0]; //把新来的数放回去
cout << "-->" << i-1 << ": ";
for (int i=1;i<=n;i++) {
cout << a[i] << " ";
}cout << endl;
}
return 0;
}
折半插入排序
最新推荐文章于 2024-08-28 23:11:16 发布