演算法學習之路|快速排序

kissjz發表於2018-02-28

求一堆數中的中位數
輸入格式:第一行一個數字n,接下來n行每行一個數

輸出格式:輸出一箇中位數

輸入樣例:
5
2
4
1
3
5
輸出樣例:
3
快排模板題。

#include<iostream>  
#include<cstdio>  
#include<algorithm>  
using namespace std;  
  
int main()  
{  
    int a[10001],i,n;  
    scanf("%d",&n);  
    for(i=1;i<=n;i++)  
        scanf("%d",&a[i]);  
    sort(a+1,a+n+1);  
    printf("%d
",a[(1+n)/2]);  
    return 0;  
}  

按快排原理手寫一個快排程式碼
void quicksort(int left,int right)  
{  
    if(left>=right) return ;  
    else  
    {  
        int i=left;  
        int j=right;  
        int temp=data[left];  
        while(i!=j)  
        {  
            while(i<j&&data[j]>=temp) j--;  
            while(i<j&&data[i]<=temp) i++;  
            if(i!=j)  
            {  
                int t=data[i];  
                data[i]=data[j];  
                data[j]=t;  
            }  
        }  
        data[left]=data[i];  
        data[i]=temp;  
        quicksort(left,i-1);  
        quicksort(i+1,right);  
        return ;  
    }  
}  


相關文章