zoukankan      html  css  js  c++  java
  • 快速排序(quickSort)

    快速排序属于高等排序,平均时间复杂度为O(n*logn)。

    快速排序是基于分治法的算法。

    首先,以整个数组为对象执行quickSort。

    quickSort的流程如下:

    1.通过分割将对象数组分割为前后两个局部数组(前半部分数组均小于基准,后半部分数组元素均大于基准)。
    2.对前部分的局部数组执行quickSort。
    3.对后半部分的局部数组执行quickSort。

    本代码选择数组中的最后一个元素为基准进行分割。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1e5+5;
    int partition(int a[],int p,int r)
    {
        int x=a[r];
        int i=p-1;
        for(int j=p;j<r;j++)
            if(a[j]<=x)
                swap(a[++i],a[j]);
        swap(a[i+1],a[r]);
        return i+1;
    }
    void quickSort(int a[],int p,int r)
    {
        if(p<r)
        {
            int q=partition(a,p,r);
            quickSort(a,p,q-1);
            quickSort(a,q+1,r);
        }
    }
    int main()
    {
        int n;
        cin>>n;
        int a[maxn];
        for(int i=0;i<n;i++)
            cin>>a[i];
        quickSort(a,0,n-1);
        for(int i=0;i<n;i++)
        {
            if(i)
                cout<<" ";
            cout<<a[i];
        }
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    反射
    ASP.NET
    解析命令行
    Private和Protected方法
    洗牌算法
    目标指向、Icon图标的错误
    数字签名与数字证书
    (Java实现) 最大团问题 部落卫队
    (Java实现) 最大团问题 部落卫队
    (Java实现)洛谷 P1164 小A点菜
  • 原文地址:https://www.cnblogs.com/orion7/p/8253165.html
Copyright © 2011-2022 走看看