ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C++ 快速排序

C++ 快速排序 快排分为两种一种是双边循环法另一种是单边循环法。注意:快排里的i与j下标比较时都要使用i j否则算法会错误一双边循环法#includeiostream using namespace std; void QuickSort(int arr[],int l,int r); void show(int arr[],int n); int main(){ int arr[10] {213,42,13,53,1243,72,321,843,134,77}; QuickSort(arr,0,9); show(arr,10); return 0; } void show(int arr[],int n){ for(int i0;in;i) coutarr[i] ; coutendl; } void QuickSort(int arr[],int l,int r){//快速排序 if(l r) return; int temp arr[l]; int i l,j r; while(i ! j){ while(j i arr[j] temp)//注意要判断ji j--; if(i j){//注意要判断ji arr[i] arr[j]; i; } while( j i arr[i] temp)//注意要判断ji i; if(i j){//注意要判断ji arr[j] arr[i]; j--; } } arr[i] temp; QuickSort(arr,l,i-1); QuickSort(arr,i1,r); }二单边循环法void sigleLoop(int[] array, int startIndex, int endIndex) { if(startIndexendIndex) { return; } int partition partitionV2(array, startIndex, endIndex); sigleLoop(array, startIndex, partition-1); sigleLoop(array, partition1, endIndex); } int partitionV2(int[] array, int startIndex, int endIndex) { int pivot array[startIndex]; int mark startIndex; for(int istartIndex1; iendIndex; i) { if(array[i]pivot) { mark; int temp array[mark]; array[mark] array[i]; array[i] temp; } } array[startIndex] array[mark]; array[mark] pivot; return mark; }三进阶三路快排912. 排序数组 - 力扣LeetCodeclass Solution { public: vectorint sortArray(vectorint nums) { if(nums.size() 0) return nums; QuickSort(nums,0,nums.size()-1); return nums; } void QuickSort(vectorint arr,int l, int r){ if(l r) return ; int temp arr[(lr)/2]; int lt l, cur l, gt r; while(cur gt){ if(arr[cur] temp){ swap(arr[cur], arr[lt]); lt; cur; } else if(arr[cur] temp){ swap(arr[cur], arr[gt]); gt--; // 注意这里不能 cur } else cur; } QuickSort(arr, l, lt-1); QuickSort(arr, gt1, r); } };
返回列表