hoj 3275 快排劃分主元

2021-08-13 10:31:26 字數 893 閱讀 7274

學快速排序劃分的時候,我們學過了選定乙個主元val,並將小於val的元素放到它左邊,大於val的元素放它右邊。

給定劃分之後的n(1 <= n <= 100000)個互不相同的正整數的排列,請問哪些元素可能是劃分前的主元。

比如給定的5個數是1 3 2 4 5,那麼1左邊沒有元素,右邊的元素都比它大,所以可以作為主元;對於第二個元素3來說,左邊的元素比3小,右邊的2比3小,所以3不可能作為劃分之前的主元;同理可以得到4和5也可以作為劃分之前的主元。所以輸出1 4 5.

多組資料。每組資料的第一行是乙個整數n,第二行是n個整數。

對於每一組資料,首先輸出可能是主元的元素的個數,然後按照在陣列中出現的先後順序輸出可能是主元的元素。數字與數字之間以空格分隔,最後乙個數字之後沒有空格。

1 3 2 4 5

3 1 4 5

首先明確劃分主元的條件:左邊值全部比它小,右邊值全部比它大。 簡而言之,作為主元的數大於左邊的最大值,小於右邊的最小值。

因此用max[i] 和 min[i] 表示第i位置左側最大與右側最小的值。

再用a[i]遍歷比較,滿足條件的數存在陣列b中。

感謝鍾蔚弘同學的幫助!

#include #include #define maxn 100002

int a[maxn];

int min[maxn],max[maxn];

int b[maxn];

int main()

while(count > 0)

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

printf("%d ",j);

for(i = 0;i < j; i++)

printf("\n");

}return 0;

}

3 27學習內容

資料結構 表 一對一關係 線性表 操作不受限制的表 棧 只能在棧頂進行新增和刪除操作的線性表 操作受限 字串 是乙個操作不受限,型別受限制的線性表 佇列 只能在隊頭刪除,隊尾新增 操作受限 樹 一對多 網 多對多 線性表 特點 分配連續的空間,每個空間大小相同 節省空間,只存資料,不存位址 優點 按...

3 27 程式設計練習

pat1001 基礎題,幾乎就是練習下基本的知識語法 迴圈 條件輸入輸出。includeint main printf d n i return 0 pat b1032 基礎題 要考慮特殊情況及初始化賦值 比如從1還是0開始 不然就會卡在特殊的測試案例上 memset語法 memset 陣列名,值,...

IBM實習日記 3 27

今天上午進行了對tds的離線備份的指令碼,其實本來功能很簡單,但是要給那些未來將接管我們的服務期又從來沒有接觸過linux的管理員用還是乙個 問題。lihao的觀點是要把文件寫清楚,而我覺得這只是一方面,要把這個shell指令碼寫的互動性強一些,這樣在操作的時候會更加人性化。於是後來的腳 本就備寫的...