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;
}
posted @ 2021-03-30 10:18  shenlei_blog  阅读(52)  评论(0)    收藏  举报