Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:就是第K小的数。。。。。(附代码【修改】)

Posted by WHQ557 at 2012-09-06 12:57:44 on Problem 2388
In Reply To:就是第K小的数。。。。。(附代码) Posted by:WHQ557 at 2012-09-06 11:03:23

修改 my_sort() 后的代码。  觉得这个快排更好些。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<fstream>
#include<cmath>
#include<vector>
#include<set>
#include<cstring>
#include<math.h>

using namespace std;

int n,k;
int a[10005];

void my_sort(int x,int y){
    if(x>=y-1) return;
    int key=x;
    int front=x,rear=x;
    while(++front<y&&a[front]<=a[key]);
    rear=front;
    while(rear<y){
        while(++rear<y&&a[rear]>=a[key]);
        if(rear<y){
            swap(a[front++],a[rear]);
        }
    }
    swap(a[key],a[front-1]);
    if(x<=k&&k<front-1) my_sort(x,front-1);
    if(front<=k&&k<y) my_sort(front,y);
}

int main(){
    while(~scanf("%d",&n)){
        for(int i=0;i<n;++i){
            scanf("%d",&a[i]);
        }
        k=n>>1;
        my_sort(0,n);
        printf("%d\n",a[k]);
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator