#include<iostream>
using namespace std;
void BinInsertSort(int num[],const int n) {
int temp[12] = {0}, finl = 0, first = 0;
temp[0] = num[0];
for (int i = 1; i < n; i++) {
if (num[i] >= temp[0]) { //比有序数大
int low = 0, high = finl;
while (low <= high) {
int mid = (low + high) / 2;
if (num[i] < temp[mid]) high = mid - 1;
else low = mid + 1;
}
for (int i = finl; i >= high+1; i--) {
temp[i + 1] = temp[i];
}
temp[high + 1] = num[i];
finl++;
}
else
{
if (first == 0)
{
first = n - 1;
temp[first] = num[i];
first--;
}
else {
int low = first, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (num[i] < temp[mid]) high = mid - 1;
else low = mid + 1;
}
for (int i = first; i <= high; i++) {
if((i-1)!=finl) temp[i - 1] = temp[i]; //first不能超多finl,不然finl的值会被替换掉
}
temp[high] = num[i];
first--;
}
}
for (int i = 0; i < n; i++) {
cout << temp[i] << " ";
}
cout << endl;
}
for (int i = 0; i < n; i++) {
num[i] = temp[(i + first+1) % n];
}
}
void main(){
int num[12] = { 10,6,2,33,15,12,23,76,1,54,22,9 };
BinInsertSort(num, 12);
for (auto x : num) {
cout << x << " ";
}
cout << endl;
system("pause");
}
(26)二路插入排序
最新推荐文章于 2023-05-06 00:59:43 发布