快速排序(分治法)

Posted outthinker

tags:

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

问题描述参考:http://blog.csdn.net/code_ac/article/details/74158681

算法实现部分:

//random_quick_sort.cpp
#include "random_quick_sort.h"
#include <stdlib.h>

template<class Type>
void RandomQuickSort(Type a[], int p, int r)
{
    if (p < r)
    {
        int q = random_partition(a, p, r);
        RandomQuickSort(a, p, q - 1);
        RandomQuickSort(a, q + 1, r);
    }
}
//随机产生基准数
template <class Type>
int random_partition(Type a[], int p, int r)
{
    int i = rand() % (r - p) + p;
    Type b;
    b = a[p];
    a[p] = a[i];
    a[i] = b;
    return partition(a, p, r);
}

//根据基准元素进行排序
template <class Type>
int partition(Type a[], int p, int r)
{
    int i = p, j = r + 1;
    Type b;
    Type x = a[p];  //以a[p]作为基准元素
    while (true)
    {
        while (a[++i] < x && i < r);
        while (a[--j] > x);
        if (i >= j)
            break;
        b = a[j];
        a[j] = a[i];
        a[i] = b;
    }
    a[p] = a[j];
    a[j] = x;
    return j;
}

 

头文件:

//random_quick_sort.h
#ifndef RANDOM_QUICK_SORT_H
#define RANDOM_QUICK_SORT_H

template <class Type>
void RandomQuickSort(Type a[], int p, int r);


#endif

 

主函数:

//main.cpp
#include<iostream>
#include "random_quick_sort.cpp"

using namespace std;

#define Type int  //定义数组元素类型

int main()
{
    int size;  //数组大小
    cout << "请输入数组大小: ";
    cin >> size;
    Type *a = new Type[size];  //定义一个数组
    cout << "请输入数组元素:  " << endl;
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
    RandomQuickSort(a, 0, size - 1);
    cout << "输出快速排序后的数组:" << endl;
    for (int j = 0; j < size; j++)
    {
        cout << a[j] << "   ";
    }
    system("pause");
    delete a;
    return 0;
}

 注意:这里的基准数是随机产生的,从而期望划分是较为对称的;

以上是关于快速排序(分治法)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 8 基础排序算法详解快速排序的实现了解分治法

分治法应用之二分查找 快速排序递归排序

排序算法之快速排序

快速排序(分治法)

算法分治法

分治法——快速排序