标签:span while amp 堆排 调整 col 中间 -- 最大的
快速排序:
void QuickSort(vector<int>& nums, int lo, int hi){ if(lo < hi){ int p = partition(nums,lo,hi); QuickSort(nums,lo,p-1); QuickSort(nums,p+1,hi); } } int partition(vector<int>& nums, int lo, int hi){ int pivot = nums[lo]; while(lo < hi){ while( lo < hi && nums[hi] > pivot) --hi; nums[lo] = nums[hi];//小的放左边 while( lo <hi && nums[lo] <= pivot) ++lo; nums[hi] = nums[lo];//大的放右边 } nums[lo] = pivot;//pivot放中间 return lo; }
插入排序
void InsertSort(vector<int>& nums){ int n = nums.size(); for(int i = 1; i< n; i++){ int t = nums[i];//先取出nums[i] int j = i; while( j > 0 && nums[j-1] > t){ nums[j] = nums[j-1]; j--; } //找到正确的位置 nums[j] = t; } }
shell排序
void ShellSort(vector<int>& nums){ int n = nums.size(); for(int k = n/2; k >= 1; k/=2){ // InsertSort for(int i = k; i < n; i++){ int t = nums[i]; int j = i; while(j - k >= 0 && nums[j-k] > t){ nums[j] = nums[j-k]; j -= k; } nums[j] = t; } } }
归并排序:没有做空间优化
void merge(vector<int>& nums,int lo, int hi){ int mid = (lo+hi)/2; vector<int> temp; int i = lo, j = mid+1; while(i <= mid && j <= hi){ if(nums[i] <= nums[j]) temp.push_back(nums[i++]); else temp.push_back(nums[j++]); } while(i <= mid) temp.push_back(nums[i++]); while(j <= hi) temp.push_back(nums[j++]); for(int i = lo; i <= hi; i++) nums[i] = temp[i-lo]; } void MergeSort(vector<int>& nums, int lo, int hi){ if(lo >= hi) return; int mid = (lo + hi)/2; MergeSort(nums,lo,mid); MergeSort(nums,mid+1,hi); merge(nums,lo,hi); }
堆排序
void percdown(vector<int>& nums, int n, int index){ int t = nums[index];// 先取出index处的值 int pa = index, chi; while(pa*2+1 < n){ chi = pa*2 + 1; if(chi != n-1 && nums[chi] <nums[chi+1]) chi++; if(t >= nums[chi]) break;//找到了正确的位置 nums[pa] = nums[chi]; pa = chi;// } nums[pa] = t;//把t放在正确的位置上 } void HeapSort(vector<int>& nums){ int n = nums.size(); //建堆 for(int i = n/2-1; i >= 0; i--) percdown(nums,n,i); for(int i = n-1; i >= 1; i--){ //把最大的放在最后 swap(nums[0],nums[i]); //调整交换后这个值的位置 percdown(nums,i,0); } }
标签:span while amp 堆排 调整 col 中间 -- 最大的
原文地址:https://www.cnblogs.com/Aliencxl/p/13189917.html