hdu1157 快排

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1157

大意:排序,取中间数。

 

PS:1.自己实现了下快排函数,也可以使用#include<algorithm>下的sort(a,a+n);函数,默认升序,若要降序or结构体排序可以增加第三个参数,声明排序规则。

     2.在写这个快排的时候出现了很多问题,花了比较多的时间,对自己很不满意。

     3.在这个while循环里写自减时,应该是j=high+1(分(low~p-1)和(p+1~high)),若不进行high+1,则需要分为(low~p)和(p+1~high)区间,不然有一个数没有遍历到,而产生错误,血的教训。。

1 while(i<j && a[--j]>t); a[i] = a[j];

2         //cout<<"j0="<<j<<endl;

3  while(i<j && a[++i]<t); a[j] = a[i];

  4.希望自己以后在面试时或者其他时候遇到这样的问题不会出现同样的错误

 1 #include<iostream>

 2 

 3 using namespace std;

 4 

 5 int q_sort_partition(int a[],int low,int high){

 6     //cout<<"low="<<low<<" high="<<high<<endl;

 7     int t = a[low];

 8     int i = low;

 9     int j = high;

10     while(i<j){

11         while(i<j && a[--j]>t); a[i] = a[j];

12         //cout<<"j0="<<j<<endl;

13         while(i<j && a[++i]<t); a[j] = a[i];

14         //cout<<"i0="<<i<<endl;

15     }

16     a[i] = t;

17     //cout<<"i="<<i<<endl;

18     return i;

19 }

20 

21 void q_sort(int a[],int low,int high){

22     if(low<high){

23         int p = q_sort_partition(a,low,high);

24         //cout<<"p="<<p<<endl;

25         q_sort(a,low,p);

26         q_sort(a,p+1,high);

27     }

28     return ;

29 }

30 

31 int main(){

32     int i,n;

33     int a[10005];

34     while(cin>>n){

35         for(i=0;i<n;i++)

36             cin>>a[i];

37         q_sort(a,0,n);

38         cout<<a[n/2]<<endl;

39     }

40     return 0;

41 }

 

你可能感兴趣的:(HDU)