(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
- (26)二路插入排序
- 插入排序:二路插入
- 插入排序:二路插入
- 二路插入排序
- 二路插入排序
- 插入排序(二)
- 1.3插入排序-二路插入排序
- 插入排序之二路插入排序
- (1.3.3.1)插入排序:二路插入
- 数据结构-二路插入排序
- 插入排序法(二)
- 排序算法(二) 插入排序
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 插入排序(二)— 表插入排序
- 基本排序(二)插入排序(直接插入、Shell、折半)
- java算法之二直接插入排序(插入排序)
- 八大排序算法之(二)插入排序 希尔排序
- 排序(二)插入排序、插入改进——二分插入排序、插入改进——希尔排序
- OneNote2013自动退出问题解决
- 反射类字段
- .rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/rubygems/...:in `require':
- Java
- 如何获取Android项目的VersionName的getPackageManager()
- (26)二路插入排序
- 类型萃取
- 多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)
- 数据库中间件-mycat快速入门
- C/C++中const的区别
- "equal()"与"=="区别
- 2015年安徽省程序设计大赛题,梯田问题题解
- C语言--通过结构体成员的地址获取结构体变量的地址
- socket链接的关闭close和shutdown的区别