用摸牌来举例,你每摸入一张牌后就要和前面的每一张牌作比较,当找到合适的位置后就需要将此位置后的牌都向后移出一个位置,然后将这张牌插入进去,依次操作,当你摸完牌后,手中的牌就井然有序了。
#include<iostream>
#include<algorithm>
using namespace std;
template<class T> //模板化
void Insert_Sort(T a[],int N){
int p, i;
for(p=1;p<N;p++){ //使p=1,默认手中已经摸入一张牌
int tmp=a[p]; //模拟摸入的牌
for(i=p;i>0&&a[i-1]>tmp;i--){
a[i]=a[i-1];//当找到牌A大于当前摸入的牌时,将A及以后的牌向后移一个位置
}
a[i]=tmp;//将摸入的牌插入
}
}
int main(){
int N;
cin>>N;
int a[N]={2,4,5,2,1};
Insert_Sort<int>(a,N);
for(int i=0;i<N;i++){
cout<<a[i]<<" ";
}
}
如测试用例:
1.第一张牌为2,摸入第二张牌张4,4>2不做交换,此时牌序为2,4
2.摸入第三张牌为5,5>4,5>2,不做交换,此时牌序为2,4,5
3.摸入第四张牌2,发现2>5,向后移位:2,4, ,5
发现2>4,再次移位得2,,4,5
2不大于2,于是将2插入此位置
得到2,2,4,5
4.1重复第三步骤