将n个数以插入排序的方法,按从小到大的升序排列,
输入:第一行输入n,接下来输入n个元素,
输出:每一次经过插入排序后的顺序
思路:
插入排序将整个数组分成已排序部分和未排序部分。
1.将开头元素视作已排序。
2.执行下述处理,直至未排序部分消失
①,取出未排序部分的开头元素视作v
②,在已排序部分中,将所有比v大的数往后移一位
③,将已取出的元素v插入空位
#include<iostream>
#include<cstdio>
using namespace std;
void print(int a[],int n){
for(int i=0;i<n;i++){
if(i!=0)
cout<<" ";
cout<<a[i];
}
cout<<endl;
}
//插入排序
void insertionSort(int a[],int n){
int j,i,v;
for(int i=1;i<n;i++){
v=a[i]; //取出未排序部分中的开头元素赋值给变量v
int j;
for(j=i-1;j>=0;j--){
if(a[j]>v) //在已排序部分中,将所有比v大的元素向后移动一个单位
a[j+1]=a[j];
else
break;
}
a[j+1]=v; //将已取出的元素v插入空位
/* int j=i-1;
while(j>=0&&a[j]>v){
a[j+1]=a[j];
j--;
}
a[j+1]=v;*/
print(a,n);
}
}
int main(){
int n;
int a[101];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
print(a,n);
insertionSort(a,n);
return 0;
}