PAT 1045. 快速排序(25)

來源:互聯網
上載者:User

標籤:演算法   沒有   交換   pre   void   lib   多少   color   ++   

著名的快速排序演算法裡有一個經典的劃分過程:我們通常採用某種方法取一個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分後的N個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?

例如給定N = 5, 排列是1、3、2、4、5。則:

 

  • 1的左邊沒有元素,右邊的元素都比它大,所以它可能是主元;
  • 儘管3的左邊元素都比它小,但是它右邊的2它小,所以它不能是主元;
  • 儘管2的右邊元素都比它大,但其左邊的3比它大,所以它不能是主元;
  • 類似原因,4和5都可能是主元。

     

    因此,有3個元素可能是主元。

    輸入格式:

    輸入在第1行中給出一個正整數N(<= 105); 第2行是空格分隔的N個不同的正整數,每個數不超過109。

    輸出格式:

    在第1行中輸出有可能是主元的元素個數;在第2行中按遞增順序輸出這些元素,其間以1個空格分隔,行末不得有多餘空格。

    輸入範例:
    51 3 2 4 5
    輸出範例:
    31 4 5
  • 主元前面的數小於該主元,後面的數大於該主元,所以排序後主元應該還在相應的位置。
  •  1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<ctype.h> 5 #include<math.h> 6 int cmp(const void *a,const void *b){ 7     return *(int*)a -*(int*)b; 8 } 9 int main(){10     int n;11     scanf("%d",&n);12     long a[100010]; 13     long b[100010];14     long c[100010];15     int k = 0;16     int i,j;17     int flag = 0;18     for(i=0;i<n;i++){19         scanf("%ld",&a[i]);20         c[i] = a[i];21     }22     qsort(c,n,sizeof(c[0]),cmp);23     24     int max = 0;25     for(i=0;i<n;i++){26         if(max<a[i])27             max = a[i];28         if(a[i]==c[i]&&max==c[i])29             b[k++] = c[i];30     }31     printf("%d\n",k);32     for(i=0;i<k;i++){33         if(i==0)34             printf("%ld",b[i]);35         else36             printf(" %ld",b[i]);37     }38     if(k==0)39         printf("\n");40 } 

     

PAT 1045. 快速排序(25)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.