像打扑克牌那样
对于未排序数据(右手抓到的牌),在已经排序序列(左手已经排好序的手牌)中从后向前扫描,找到相应的位置并插入。
算法描述:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,知道找到已排序的元素小于或者等于新元素的位置
5,将新元素插入到该位置后
6.重复步骤2~5
插入排序不适合对于数据量比较大的排序应用,但是,如果排序的数据量很小,比如量级小于千,那么插入排序是一个很不错的选择,插入排序在工业级库中也是一个不错的选择,在STL中的sort和stdlib中的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序(通常为8个或以下)。
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e2+5;
int s[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&s[i]);
}
for(int i=0;i<n;i++){
if(i!=0){
printf(" ");
}
printf("%d",s[i]);
}
printf("\n");
for(int i=1;i<n;i++){
int key=s[i];
int j=i-1;
//Insertion Sort算法核心
while(j>=0&&s[j]>key){
s[j+1]=s[j];
j--;
}
s[j+1]=key;
for(int k=0;k<n;k++){
if(k!=0){
printf(" ");
}
printf("%d",s[k]);
}
printf("\n");
}
return 0;
}