zoukankan      html  css  js  c++  java
  • 快速排序(分治法)

    问题描述参考: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;
    }

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

  • 相关阅读:
    ES6 Promise用法讲解
    NPM使用介绍
    Docker学习系列(二):Docker三十分钟快速入门(上)
    Spring Cloud学习(一)
    胖ap和瘦ap的区别
    论网络知识的重要性
    2018 发发发发
    sikuli--前端自动化操作的神器
    更改MySQL数据库的编码为utf8mb4
    数据库mysql的常规操作
  • 原文地址:https://www.cnblogs.com/zf-blog/p/8370741.html
Copyright © 2011-2022 走看看