原文:白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
#include <iostream>
#include <vector>
using namespace std;
void insertsort(vector<int> &vi){
if(vi.size()<=1) return ;
int n=vi.size();
for(int i=1;i<n;++i){
int temp=vi[i];
int j=i-1;
for(;j>=0 && vi[j]>vi[i];--j);//找到比vi[i]小的元素下标
for(int k=i;k>j+1;--k){
vi[k]=vi[k-1];
}
vi[j+1]=temp;
}
}
//优化1:使代码从结构上与效率上都比insertsort更好。
void insertsort1(vector<int> &vi){
if(vi.size()<=1) return ;
int n=vi.size();
for(int i=1;i<n;++i){
int temp=vi[i];
int j=i-1;
for(;j>=0 && vi[j]>temp;--j)
vi[j+1]=vi[j];
vi[j+1]=temp;
}
}
//优化2:这个只是优化结构,效率上比insertsort1要差
void insertsort2(vector<int> &vi){
if(vi.size()<=1) return ;
int n=vi.size();
for(int i=1;i<n;++i){
for(int j=i-1;j>=0 && vi[j]>vi[j+1];--j)
swap(vi[j],vi[j+1]);
}
}
int main(){
vector<int> vi;
vi={1,8,2,3,7,6,9,5,4};
// insertsort(vi);
// insertsort1(vi);
insertsort2(vi);
for(auto ieh: vi)
cout<<ieh<<" ";
cout<<endl;
return 0;
}