自己写个数组,按照代码走一遍,会更好理解~
直接插入排序:两个指针i,j,i从数组第二个元素开始遍历数组的每一个元素,在遍历每个元素的时候,用 j 遍历 i 之前的元素,
如果比原来nums[i](下标 i 对应数组值)小的,就进行元素后移,数组是没有删除元素这一说,本质只有覆盖原有元素,那么移动完后,就会空出一个位置(其实是有元素的,不要管),你只要把原来放到(覆盖)该位置即可。
#include <iostream>
#include <vector>
using namespace std;
void insert_sort(vector<int> &nums){
int i, j, index_max = nums.size()-1;
for(i=1; i<=index_max; i++){ // i从第二个数循环到最后一个数
int tmp = nums[i];
for(j=i-1; j>=0; j--){ // j从 i 的前一个循环到第一个:就是看i之前的 有没比 nums[i](tmp),更大的,把它移到后面
if(nums[j] > tmp){
nums[j+1] = nums[j];
}else{
break;
}
}
nums[j+1] = tmp; //移动完后,将 tmp 插入到 它该到的位置
}
}
void printVec(vector<int> &nums){
for(auto n:nums){
cout << n <<" ";
}
cout << endl;
}
int main(){
vector<int> nums = {2, 7, 9, 6, 10, 5, 8, 4, 3, 1}; //
insert_sort(nums);
printVec(nums);
return 0;
}