算法思路:起始时第1个元素为已排序序列,第2至第n个元素为未排序序列,从第2个元素开始,每次将第i个元素(2<=i<=n)插入已排序序列,即与前i-1个元素依次比较(从后往前),若插入后符合有序要求就插入,否则让当前比较元素右移,直到找到插入后符合有序要求的位置并插入。
算法设计:
#include<iostream>
using namespace std;
int main(){
int n,a[101];
cout<<"请输入待排序元素个数"<<endl;
cin>>n;
cout<<"请输入待排序元素"<<endl;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n-1;i++)
for(int j=i+1,t=a[j];j>=2;j--){ //记录待插入元素的值
if(a[j-1]>t){ //如果第i-1个元素大于待插入元素,则将第i-1个元素右移
a[j]=a[j-1];
if(j==2)
a[j-1]=t;
}
//如果第i-1个元素小于待插入元素,则将待插入元素插到第i-1个元素之后,即第i个元素
else{
a[j]=t;
break;
}
}
cout<<"排序后各元素为"<<endl;
for(int i=1;i<=n;i++)
cout<<a[i]<<' ';
return 0;
}