快排
快排的基本思想
快排用到的是分而治之的思想,隨機的選取陣列中的一個元素pivot,將小於pivot的排在左邊,大於等於pivot的排在右邊, 然後在對左右兩邊的序列採用相同的方法,直至每個子陣列只剩一個元素為止。
//單指標
int randomPartion(vector<int> &nums,int left,int right){
int rand_index=rand()%(right-left+1)+left; //最好隨機
swap(nums[left],nums[rand_index]);
int pivot=nums[left];
int j=left;
for(int i=left+1;i<=right;i++){
if(nums[i]<pivot){
j++;
swap(nums[i],nums[j]);
}
}
swap(nums[j],nums[left]);
return j;
}
//雙指標
int randomPartion2(vector<int> &nums,int left,int right){
int rand_index=rand()%(right-left+1)+left; //最好隨機
swap(nums[left],nums[rand_index]);
int pivot=nums[left]; //left 鹹魚
while(left<right){
while(left<right&&nums[right]>=pivot){
right--;
}
nums[left]=nums[right]; //right 鹹魚
while(left<right&&nums[left]<pivot){
left++;
}
nums[right]=nums[left]; //left 鹹魚
}
nums[left]=pivot;
return left;
}
void quick(vector<int> &nums,int left,int right){
if(left<right){
int q=randomPartion(nums,left,right);
quick(nums,left,q-1);
quick(nums,q+1,right);
}
}
//在topK中的應用
int findKthLargest(vector<int>& nums, int k) {
int target=nums.size()-k;
int left=0,right=nums.size()-1;
while(1){
int index=randomPartion2(nums,left,right);
if(index==target)
return nums[target];
else if(index<target){
left=index+1;
}
else{
right=index-1;
}
}
}
快排的應用:
- 排序
- topK 215. 陣列中的第K個最大元素
相關文章
- 快排分析
- 【Algorithm】快排分割槽方法Go
- 用js實現快排JS
- 再寫一次快排
- 面試官,您要的快排面試
- 快排其實很簡單
- 氣泡排序 插入排序 快排排序
- C — 快排函式 qsort 的用法函式
- JS快速排序&三路快排JS排序
- C語言排序 冒泡 選擇 快排C語言排序
- 排序法:選擇、冒泡、插入和快排排序
- IceRPC之排程管道->快樂的RPCRPC
- 最小的 k 個元素--快排變形
- js冒泡、快排的簡單寫法JS
- 快排思想O(N)求第k大數
- 「排序演算法」圖解雙軸快排排序演算法圖解
- 快排實現仿order by多欄位排序排序
- 演算法(氣泡排序,快排,歸併排序)演算法排序
- 技術分享| 快對講影片排程功能說明
- 常見的排序演算法:冒泡、快排、歸併排序演算法
- IceRPC之深入理解排程管道->快樂的RPCRPC
- 解決方案| 快對講綜合排程系統
- 技術分享| 快對講綜合排程系統
- 技術分享| 快對講排程系統設計概要
- 技術分享| 排程平臺的好助手-快對講
- 解決方案| 快對講排程系統:高效協作
- ACW--基礎語法1(快排,歸併,二分)
- 《演算法筆記》3. 歸併排序、隨機快排整理演算法筆記排序隨機
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- Flink排程之排程器、排程策略、排程模式模式
- Laravel 效能優化實踐:在 Auth 中用 Cache 排程快取的 User 模型Laravel優化快取模型
- 單連結串列的冒泡,快排,選擇,插入,歸併等多圖詳解
- Java Day_6(陣列,JVM記憶體,遞迴演算法(冒泡,快排))Java陣列JVM記憶體遞迴演算法
- 牛亞男:基於多Domain多工學習框架和Transformer,搭建快精排模型AI框架ORM模型
- 第三章 :查詢與排序-------3.5快排之三指標分割槽法排序指標
- 第三章 :查詢與排序-------3.4快排之雙向掃描分割槽法排序
- 前端也能學演算法:JS版常見排序演算法-冒泡,插入,快排,歸併前端演算法JS排序
- 百度演算法1月精準打擊快排廠商:整體排名掉60%演算法