插入排序

一、首先是直接的插入排序:

这个过程是这样的:

  1. 首先是这个数组前面一段是排好序的数组,后面一段是无序待排数组。
  2. 然后第一层循环i是遍历每一个数组的元素,然后将这元素放进前面的有序数组,找出这个元素应该在哪个位置,这个位置记为j。
  3. 然后将这个元素j到i的元素全部往后面移动一位
  4. 最后将这个记录的元素flag给应该插入的位置
void dinsert(vector<int>&nums) {
    int flag;
    int j;
    for (int i = 1; i < nums.size(); i++) {
        flag = nums[i];
        for (j = i - 1; nums[j] > flag; j--);//注意这里j的位置
        for (int k = i - 1; k > j; k--) {
            nums[k + 1] = nums[k];
        }
        nums[j + 1] = flag;
    }
}

二、将这个寻找位置的操作和往后移动元素的操作放在一起,合并两个循环体

这里的是将寻找位置和移动元素放在一起:

void dinsert(vector<int>&nums) {
    int flag;
    int j;
    for (int i = 1; i < nums.size(); i++) {
        flag = nums[i];
        for (j = i - 1; nums[j] > flag; j--) {
            nums[j + 1] = nums[j];
        }
        nums[j + 1] = flag;
    }
}

 

posted @ 2022-09-25 22:53  铜锣湾陈昊男  阅读(2)  评论(0)    收藏  举报