兩種快速排序 C++ 實現


兩種思路,第一種就是在數組兩邊放置兩個指針,第二種是在數組左邊放置兩個快慢指針。第二種方法更簡潔,並且可以擴展至單鏈表的情形。推薦使用

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <map>
#include <ctime>
#include <set>
#include <algorithm>



using namespace std;
using namespace cv;

int quick_sort(vector<int>& nums, int i_begin, int i_end){
    if(i_begin >= i_end){
        return 0;
    }
    int key = nums[i_begin];
    int left = i_begin;
    int right = i_end;
    while(left<right){
        while(left<right && nums[right] >= key){
            right--;
        }
        if(left < right){
            nums[left] = nums[right];
            left++;
        }
        while(left<right && nums[left] < key){
            left++;
        }
        if(left < right){
            nums[right] = nums[left];
            right--;
        }
    }
    nums[left] = key;
    quick_sort(nums, i_begin, left-1);
    quick_sort(nums, left+1, i_end);
    return 0;
}



int quick_sort_simple(vector<int>& nums, int begin, int end, int temp){
    if(begin>=end){
        return 0;
    }
    int key = nums[begin];
    int left = begin;
    int right = begin + 1;
    while(right != end){
        if(nums[right] < key){
            left++;
            temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
        }
        right++;
    }
    temp = nums[begin];
    nums[begin] = nums[left];
    nums[left] = temp;

    quick_sort_simple(nums, begin, left, 0);
    quick_sort_simple(nums, left + 1, end, 0);
    return 0;
}



int main(int argc, char* argv[])
{
    vector<int> nums = {10, 5, 4, -10, 2, 0};
    for(auto i:nums){
        cout << i << ' ';
    }

    cout << endl;
//    quick_sort(nums, 0, (int)nums.size() - 1);
    quick_sort_simple(nums, 0, (int)nums.size(), 0);

    for(auto i:nums){
        cout << i << ' ';
    }
    return 0;
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM