(26)二路插入排序

来源:互联网 发布:悟空传 知乎 编辑:程序博客网 时间:2024/06/03 18:45
#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");}

0 0
原创粉丝点击