1045 快速排序 python

2021-09-10 09:32:18 字數 1033 閱讀 2957

1045 快速排序 (25 分)

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

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

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

輸入在第 1 行中給出乙個正整數 n(≤10​5​​); 第 2 行是空格分隔的 n 個不同的正整數,每個數不超過 10​9​​。

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

5

1 3 2 4 5

3

1 4 5

這個題不會做,看了btboay大神的答案 

n = int(input())

a = [int(i) for i in input().split()]

result =

max = 0

for i in range(n):

if a[i]>max:

max = a[i]

else:

for j in range(len(result)-1,-1,-1):

if result[j]>=a[i]:

del result[j]

else:

break

result.sort()

print(len(result))

if len(result)!=0:

result = list(map(str,result))

print(" ".join(result))

else:

print("")

感覺大神各種方法用的都很靈活,像我一般就不會想到for迴圈的range倒著用

這段**剛看的時候很懵逼,然後用13245代進去試了一遍就明白了

1045 快速排序

如果按照題目正常寫的話就只有第乙個點能通過,結果超時,後來觀察到可以和排好序的陣列比較,數字相等的時候才能算,但是也有一半的點是不能通過的,後來,想到了如果有兩個相同的數字,那麼在排序的過程中,兩個數字就是挨著的,那麼就沒辦法與未排序的陣列一一對應了,這樣就判斷一下,需要判斷的數字是否比之前的最大值...

1045 快速排序

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

1045 快速排序

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