快速排序

来源:互联网 发布:万网注册域名流程 编辑:程序博客网 时间:2024/05/22 16:13

分治法,排列(l,r),找到指定元素的最终位置key(左边均小于key,右边均大于key),然后递归(l,key-1),(key+1,r)

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define T 1000000#define INF 999999int n,a[T],b[T];//快速排序void qsort(int *a,int l,int r){    if(l>=r) return ;    int key=l,x=l,y=r;    while(x<y)    {        while(y>x)        {            if(a[key]>a[y])            {                swap(a[key],a[y]);                key=y;                break;            }            y--;        }        while(y>x)        {            if(a[key]<a[x])            {                swap(a[key],a[x]);                key=x;                break;            }            x++;        }    }    qsort(a,l,key-1);    qsort(a,key+1,r);    return ;}int main (){    while(scanf("%d",&n)!=EOF)    {        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        qsort(a,0,n-1);        int p=(n+1)/2;        printf("%d\n",a[p-1]);    }    return 0;}


原创粉丝点击