插入排序

思路:把数组当成有序和无须两部分,将无须部分的元素与有序部分的元素逐个比较,并且插入到正确的位置,直到无须部分没有元素。

步骤:

1.遍历整个数组所有元素,从第二个元素开始遍历,假设第一个元素自身就是有序的。

2.有序部分后的第一个元素,为无须部分的第一个元素。遍历无须部分的元素,根据部分3插入到有序部分中去。

3.将无须部分的第一个元素与有序部分的元素逐个比较,从有序部分的尾部开始比较。如果有序部分的元素比该元素大,则将有序部分的这个元素填到后面一个位置上。当该元素比有序部分的元素大时,停止遍历,并将该元素填到该位置上。

 

void insertSort(vector<int>& arr){
    for(int i = 0; i < arr.size();i++){
        int temp = arr[i];
        int j = i;
        for( ; j > 0 && arr[j-1] > temp; j--){
            arr[j] = arr[j-1];
        }
        arr[j] = temp;
    }
}

 

 

分析:

因为两个循环,所以时间复杂度为O(n2),是稳定的排序算法。

posted @ 2020-05-02 17:09  jenningszheng  阅读(139)  评论(0编辑  收藏  举报