1. 程式人生 > >快速排序(分治法)

快速排序(分治法)

ios type font nbsp def 註意 class 裏的 span

問題描述參考: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;
}

註意:這裏的基準數是隨機產生的,從而期望劃分是較為對稱的;

快速排序(分治法)