1045 快速排序(C語言)

2021-09-12 07:47:04 字數 569 閱讀 3063

設計思路:

主要是降低時間複雜度

以主元的定義,暴力判斷,時間複雜度 o(n*n)

利用陣列記錄每個數前面的最大值,後面的最小值,時間複雜度 o(n)

最初解題時很簡單的想到,在輸入時記錄每個數前面的最大值,然後就想怎麼記錄每個數後面的最小值,因為資料是從前往後讀取,記錄最小值的方法越想越亂,最後看到大佬的**才反應過來,資料都存好了,從後往前再讀一次就是最小值(囧,想撞死在鍵盤上~~)

編譯器:c (gcc)

#include

intmain()

for(i = n -

1, min = i; i >=

0; i--

)for

(i =

0; i < n; i++

)else

}printf

("%d\n"

, count)

;for

(i =

0; i < n && count; i++)}

printf

("\n");

return0;

}

1045 快速排序

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

1045 快速排序

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

1045 快速排序

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