插入排序
一、首先是直接的插入排序:
这个过程是这样的:
- 首先是这个数组前面一段是排好序的数组,后面一段是无序待排数组。
- 然后第一层循环i是遍历每一个数组的元素,然后将这元素放进前面的有序数组,找出这个元素应该在哪个位置,这个位置记为j。
- 然后将这个元素j到i的元素全部往后面移动一位
- 最后将这个记录的元素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; } }

浙公网安备 33010602011771号