算法分析與設計C++ 尋找中位數 (快速排序版)

總時間限制: 100ms 內存限制: 65535kB 描述 在N(1 <= N <= 100001 且N爲奇數)個數中,找到中位數。ios

輸入 第1行:N算法

第2行:N個整數 輸出 輸入的第2行N個整數的中位數。 樣例輸入 5 2 4 1 3 5 樣例輸出 3 提示 若使用時間複雜度大於 O(NlogN)的排序算法,會返回 Time Limit Exceeded。 來源 重慶科技學院 WJQspa

#include<iostream>
using namespace std;
void q_sort(int *a, int l, int r){
    if(l<r){
        int i=l;
        int j=r;
        int x=a[i];
        while(i<j){
            while(i<j&&a[j]>=x)
            {
                j--;
            }
            if(i<j){
                a[i]=a[j];
            }

            while (i<j&&a[i]<x)
            {
                i++;
            }
            if(i<j){
                a[j]=a[i];
            }
        }
        a[i]=x;
        q_sort(a,l,i-1);
        q_sort(a,i+1,r);
    }
    
}

int main()
{
    
    int n;
    cin>>n;
    int a[n];
    for (int  i = 0; i < n; i++)
    {
        cin>>a[i];
    }
    int mid = sizeof(a)/sizeof(a[0])/2;
    
    q_sort(a,0,n);
    cout<<a[mid];
    

    return 0;
}
相關文章
相關標籤/搜索