原文:白话经典算法系列之八 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; }