voidinsertSort(vector<int>& nums){for(int i =1; i < nums.size();++i){int j = i;while(j >=1&& nums[j]< nums[j -1]){swap(nums[j], nums[j -1]);--j;}}}
折半插入
voidbinaryInsertSort(vector<int>& nums){for(int i =1; i < nums.size();++i){int key = nums[i];int low =0, high = i -1;while(low <= high){int mid = low +(high - low)/2;if(nums[mid]>= key){
high = mid -1;}else{
low = mid +1;}}for(int k = i -1; k >= low;--k){
nums[k +1]= nums[k];}
nums[low]= key;}}
希尔排序
voidshellSort(vector<int>& nums){int n = nums.size();for(int dk = n /2; dk >=1; dk /=2){for(int i = dk; i < n;++i){int j = i;while(j >= dk && nums[j]< nums[j - dk]){swap(nums[j], nums[j - dk]);
j -= dk;}}}}
冒泡排序
voidbubbleSort(vector<int>& nums){for(int i = nums.size()-1; i >0;--i){for(int j =0; j < i;++j){if(nums[j]> nums[j +1]){swap(nums[j], nums[j +1]);}}}}
快速排序
intpartition(vector<int>& nums,int left,int right){// 设定随机pivotint randIdx =rand()%(right - left +1)+ left;swap(nums[left], nums[randIdx]);int pivot = nums[left];while(left < right){while(left < right && nums[right]>= pivot)--right;
nums[left]= nums[right];while(left < right && nums[left]<= pivot)++left;
nums[right]= nums[left];}
nums[left]= pivot;return left;}voidrecurSort(vector<int>& nums,int left,int right){if(left > right)return;int p =partition(nums, left, right);recurSort(nums, left, p -1);recurSort(nums, p +1, right);}voidquickSort(vector<int>& nums){srand((unsigned)time(nullptr));recurSort(nums,0, nums.size()-1);}
简单选择排序
voidselectSort(vector<int>& nums){for(int i =0; i < nums.size();++i){int minIdx = i;for(int j = i +1; j < nums.size();++j){if(nums[minIdx]> nums[j]){
minIdx = j;}}swap(nums[i], nums[minIdx]);}}
堆排序
voidheadAjust(vector<int>& nums,int i,int len){while(i *2+1<= len){int left = i *2+1, right = i *2+2;int largest = i;if(left <= len && nums[left]> nums[i]){
largest = left;}if(right <= len && nums[right]> nums[largest]){
largest = right;}if(largest == i)break;swap(nums[i], nums[largest]);
i = largest;}}voidheapSort(vector<int>& nums){// 构建最大堆int len = nums.size()-1;for(int i = len /2; i >=0;--i){headAjust(nums, i, len);}for(int i = len; i >0;--i){swap(nums[i], nums[0]);headAjust(nums,0,--len);}}