2020-3-30 插入排序思想和实现
插入排序
插入排序就是将数组分成两个部分,已经排序完成部分和待排序部门,其中Key值为下一个需要插入的值,需要判断的是key值与左边有序数列的大小,如果大于arr[i]且小于arr[i+1],则插入到arr[i+1]的位置,将arr[i+1]以后所有的数,全部往后移动一位
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
vector<int> arr;
//输入n个无序的参数
while(cin>>n){
while(n--){
int num;
cin>>num;
arr.push_back(num);
}
//处理
int i=1; //从第二个字符开始,将左边的定义为有序的,右边的是依次需要插入的
int key; //需要插入的值
while(i!=arr.size()){
key=arr[i];
int j=i-1; //从较大值,依次向较小值遍历,直到找到比自己小的值的位置
while(arr[j]>key&&j>-1) //终止条件为key值到达arr[0]的位置,或者不满足key<arr[j]的条件
{
arr[j+1]=arr[j]; //每次遍历一个数,将这个数向右移动一个格子,因为arr[i]的位置,已经清空
j--; //向左移动
}
arr[j+1]=key; //将因为此时有arr[j]<key,key<arr[j+1],但是arr[j+1]已经右移了
i++; //选择新的key值
}
//输出有序序列
for(auto x:arr){
cout<<x<<" ";
}
}
return 0;
}
浙公网安备 33010602011771号