PAT1045 快速排序 25

2021-08-15 09:17:11 字數 1003 閱讀 1982

題目思路:

1.初步我用迴圈做的,發現超時

2.思路改進,觀察給出的樣例和他的輸出

1 3 2 4 5

排序後 1 2 3 4 5

要的結果 1 4 5

是不是有點感覺了呢

3.我就按照這個思路又複製了原來的陣列,將原來的陣列排序後,遍歷對比一下,找到位置相同的,count++

4.滿懷好奇,成功了幾個,其他全錯

5.回想一下,總覺得**不對啊,想了幾個測試例子

①例如:5 4 3 2 1

1 2 3 4 5

3??大家應該看出問題所在了,3不是我們要的結果啊!但他還是被輸出了

②再舉個例子

5 4 3 2 1 6 7 8 9

1 2 3 4 5 6 7 8 9

我們要的是 6 7 8 9 (3是不要的)

#include 

#include

int cmp(const

void *a,const

void *b)

int main()

int b[t];//copy

for(int i=0;i<=t-1;i++)

int c[t];//儲存被選中的數

int count=0;

qsort(b,t,sizeof(b[0]),cmp);//quick sort

for(int i=0;i<=t-1;i++)

}printf("%d\n",count);//output number

int flag=0;

for(int i=0;i<=count-1;i++)

else

}printf("\n");

return

0;}

PAT 1045 快速排序 25

題目描述 著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的n個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定n 5,排列是1 3 2 4 5。則 1的左邊沒有...

PAT 1045 快速排序

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

PAT 1045 快速排序

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