插入排序的基本思路 直接插入排序 代码: 登录后复制 void InsertSort(vector<int>&a) { int n=a.size(); if(n==1) return; for(int i=1;i<n;i++) { //a[i]插入到a[0~i-1]中 int temp=a[i]; int j=0; //找到第一个比a[i]大的元素下标j,a[i]插入到j的位置 while(a[j]<temp) { j++; } for(int k=i;k>j;k--) { a[k]=a[k-1]; } a[j]=temp; } return ; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23. 折半插入排序: 代码: 在R【0....I-1】找插入下标:二分法查找 如果查找成功,index为mid 如果查找失败,则right<target<left(手动模拟),index为right+1 登录后复制 void BinInsertSort(vector<int>&nums) { for(int i=1;i<nums.size();i++) { //a[i]插入到a[0...i]中使之有序 int temp=nums[i]; int left=0; int right=i-1; int index; while(left<=right) { int mid=left+(right-left)/2; if(nums[mid]==nums[i]) { index=mid; break; } else if(nums[mid]>nums[i]) { right=mid-1; } else { left=mid+1; } } if(right<left)index=right+1; for(int k=i;k>index;k--) { nums[k]=nums[k-1]; } nums[index]=temp; } return; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35. 希尔排序: 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813391