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

    时间复杂度O(nlogn)

    找一个基数,使得这个基数的左边都比它小,右边都比它大。

    双指针实现,从左边找找到第一个比基数大下标为i, 从右边找到第一个比基数小的数下标为j,i、j交换。

    i == j 时将基数与a[i]交换,分治继续对(l , i-1) 与(i+1 , r)区间进行排序。

    //#include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <stdio.h>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <string.h>
    #include <vector>
    #define ME(x , y) memset(x , y , sizeof(x))
    #define SC scanf
    #define rep(i ,j , n) for(int i = j ; i < n ; i ++)
    #define INF  0x3f3f3f3f
    #define mod 1000000007
    #define PI acos(-1)
    using namespace std;
    typedef long long ll ;
    int a[1009];
    int n ;
    
    void quickp(int l , int r){
        if(l > r) return ;
        int i = l , j = r ;
        while(j > i){
            while(a[j] >= a[l] && i < j){
                j--;
            }
            while(a[i] <= a[l] && i < j){
                i++;
            }
            if(i < j)
                swap(a[i] , a[j]);
        }
        swap(a[l] , a[i]);
        quickp(l , i-1);
        quickp(i+1 , r);
    }
    
    int main()
    {
        cin >> n ;
        rep(i , 1 , n+1){
            SC("%d" , &a[i]);
        }
        quickp(1 , n);
        rep(i , 1 , n+1){
            cout << a[i] << " " ;
        }
    
        return 0 ;
    }
    
  • 相关阅读:
    文件读写
    使用HttpClient实现文件的上传下载
    TreeMap
    Linux的目录结构与文件权限
    Hibernate中get()和load()方法的区别
    Hibernate中openSession()与getCurrentSession()的区别与联系
    Hibernate核心类和接口
    Hibernate连接数据库
    Struts2中OGNL表达式的用法
    Struts2中Result的配置
  • 原文地址:https://www.cnblogs.com/nonames/p/12286104.html
Copyright © 2011-2022 走看看