标题:[数据结构] 基于交换的排序 冒泡排序&&快速排序
@水墨不写bug
(图片来源于网络)
目录
正文开始:
(一)冒泡排序
(二)快速排序
I、实现方法:
(1)hoare法
hoare法是快排的提出者hoare提供的方法,是一种经典的实现方法。
(2)挖坑法
(3)双指针法
II、快速排序复杂度分析:
比较完备的快速排序实现如下:
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
srand(time(NULL));
qsort(nums,0,nums.size()-1);
return nums;
}
void qsort(vector<int>& nums,int l,int r){
//递归出口
if(l >= r) return;
//数组分三块
int key = GetRandom(nums,l,r);
int cur = l,left = l-1,right = r+1;
while(cur < right){
if(nums[cur] < key) swap(nums[++left],nums[cur++]);
else if(nums[cur] == key) cur++;
else swap(nums[--right],nums[cur]);
}
//递归排序子区间
qsort(nums,l,left);
qsort(nums,right,r);
}
int GetRandom(vector<int>& nums,int left,int right){
return nums[ rand() % ( right - left + 1 ) + left];
}
};
完~
未经作者同意禁止转载