剑指offer 快速排序

Posted FriskyPuppy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 快速排序相关的知识,希望对你有一定的参考价值。

  题目链接: 剑指offer

  题目描述: 快速排序

  解题思路: 快速排序

  代码: 

技术分享
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <iterator>
#include <cmath>
#include <algorithm>
#include <stack>
#include <deque>
#include <map>
#include <set>
#include <queue>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define sca(x) scanf("%d",&x)
#define de printf("=======\n")
typedef long long ll;
using namespace std;

int RandomInRange(int s, int e) {
    return rand() % (e-s+1) + s;
}

void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int Partition(int data[], int len, int start, int end) {
    if( data == NULL || len <= 0 || start < 0 || end >= len ) {
        throw new std::exception();
    }
    int index = RandomInRange(start, end);
    if( index != end ) swap(data[index], data[end]);
    int small = start-1;
    for( int index = start; index < end; index++ ) {
        if( data[index] < data[end] ) {
            small++;
            if( small != index ) {
                swap(data[small], data[index]);
            }
        }
    }
    small++;
    swap(data[small], data[end]);
    return small;
}

void QuickSort(int data[], int len, int start, int end) {
    if(start == end) return;
    int index = Partition(data, len, start, end);
    if( index > start ) {
        QuickSort(data, len, start, index-1);
    }
    if( index < end ) {
        QuickSort(data, len, index+1, end);
    }
}

int main() {
    int data[10] = {134,32,13,510,5,5,7,78,96,15};
    QuickSort(data, 10, 0, 9);
    for( int i = 0; i < 10; i++ ) {
        cout << data[i] << " ";
    }
    cout << endl;
    return 0;
}
View Code

  思考: 写写剑指offer里的题, 练练自己的代码能力

以上是关于剑指offer 快速排序的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

剑指offer:最小的K个数

剑指Offer-时间效率面试题40:最小的k个数

剑指offer(二十七)之数字在排序数组中出现的次数

《剑指Offer——数字在排序数组中出现的次数》代码

剑指Offer对答如流系列 - 数组中出现次数超过一半的数字