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 ;
    }
    
  • 相关阅读:
    第一课 JSON的简介
    xml 简介
    前端面试题汇总(长期更新)
    HTML5中的canvas
    AJAX第一课 AJAX的学习和简介
    margin:0 auto和text-aglin:center的区别
    js中的正则表达式
    border和box-shadow
    css中的伪类
    (素材源码)猫猫学IOS(十五)UI之曾经大热的打砖块小游戏
  • 原文地址:https://www.cnblogs.com/nonames/p/12286104.html
Copyright © 2011-2022 走看看