#include<iostream>
using namespace std;
void insertSort(int r[], int n) {
//i是对应元素的下标
for (int i = 2; i <= n; i++) {
r[0] = r[i];
int j = i - 1;
while (r[0] < r[j]) {
r[j+1] = r[j];
j--;
}
//当移动到r[0]>=r[j]时
r[j+1] = r[0];
//如果一开始r[0] >= r[j],则直接插入什么都不用做
}
}
int main(){
//4,3,2,1,9排序
int array[6] = {0,4,3,2,1,9};
int length = sizeof(array) / sizeof(array[0]);
//length-1为数组最后一个元素的下标
//也是实际有效数组{4,3,2,1,9}的长度
//第一个0是r[0],作为暂存单元和监视哨
insertSort(array,length-1);
for(int i=1;i<=length-1;i++){
cout<<array[i]<<" ";
}
return 0;
}
折半二分插入排序
#include<iostream>
using namespace std;
void insertSort(int r[],int length){
int mid;
for(int i=2;i<=length;i++){
r[0] = r[i];
int low = 1,high = i-1;
while(low <= high){
mid = (low+high) / 2;
if(r[0]<r[mid]){
high = mid - 1;
}else{
low = mid+1;
}
}//循环结束,high+1为插入位置
for(int j=i-1;j>=high+1;j--){
r[j+1] = r[j];
}
r[high+1] = r[0];
}
}
int main(){
int array[6] = {0,4,3,2,1,9};
int length = sizeof(array)/sizeof(array[0]);
insertSort(array,length-1);
for(int i=1;i<=length-1;i++){
cout<<array[i]<<" ";
}
return 0;
}