题面:
输入个整数,用插入排序算法将这个数从小到大进行排序,
输入:
10
2 3 4 1 3 6 7 4 9 8
输出:
1 2 3 3 4 4 6 7 8 9
思路:
void insertion_sort(int a[],int n){
for(int i = 2; i <= n; i++){
int j = i-1; //不能用i,因为后面要j--的
int key = a[i]; //定义key等于当前要比的数
while(j >= 1 && a[j] > key){
a[j+1] = a[j];
j--;
}//然后循环,j >= 1是保证不越界,a[j] > key是当a[j]大于key的时候才循环,如果a[j]小于key了,就把key插在这里了
a[j+1] = key;//插入key
}
}
大佬の思路↑
CODE:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1001;
int a[maxn];
void insert_sort(int a[],int n){
for(int i=2;i<=n;i++){
int key=a[i]; //存当前变量
int j=i-1; //当前的前一个变量
while(j>=1&&a[j]>key){ //如果比当前变量大
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]; //输入数组
}
insert_sort(a,n); //给数组排序
for(int i=1;i<=n;i++){
cout<<a[i]<<" "; //输出数组
}
return 0;
}