0
点赞
收藏
分享

微信扫一扫

Scala编程之旅:揭秘编译过程的奥秘

标题:[数据结构] 基于交换的排序 冒泡排序&&快速排序

@水墨不写bug


(图片来源于网络) 


目录

(一)冒泡排序

优化后实现:

(二)快速排序

I、实现方法: 

(1)hoare法

hoare法实现快排:

 (2)挖坑法

挖坑法实现:

(3)双指针法 

双指针法实现: 

 II、快速排序复杂度分析:

比较完备的快速排序实现如下:


正文开始:

(一)冒泡排序


(二)快速排序

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];
    }
};

 完~

未经作者同意禁止转载

举报

相关推荐

0 条评论