我寫的快速排序演算法出了什麼問題?

發布 科技 2024-06-08
13個回答
  1. 匿名使用者2024-01-29

    你的快行太亂了......寫如果你有 pascal 版本,你應該不難理解,如果需要,我可以編寫 C++。

    procedure qsort(low,high:longint);

    vari,j,t,mid:longint;

    begini:=low;

    j:=high;

    mid:=a[(i+j) shr 1];二分法。

    repeat

    while a[i]mid do dec(j);從小到大排序。

    if i<=j then

    begint:=a[i];

    a[i]:=a[j];

    a[j]:=t;

    end;inc(i);

    dec(j);

    until i>j;

    if lowif iend;

  2. 匿名使用者2024-01-28

    分類: 計算機網路 >> 程式設計 >>其他程式語言.

    問題描述:我使用免費的 pascal

    分析:不穩定排序演算法的含義是:

    在排序之前,有兩個數字相等。

    但是排序結束後,他們兩個可以改變順序。

    例如,在待排序的佇列中,A 和 B 相等,A 在 B 之前,排序後,A 在 B 之後。 這時,我們說這個演算法是不穩定的。

    只要有這種可能,我們就說演算法不穩定。 )

    注意:演算法的不穩定性與所使用的語言無關。

    那麼,為什麼快速排序不穩定呢?

    我們來看看快速排序的過程:(借用前面的假設,假設 a 和 b 相等,並用一堆其他資料參與排序。 )

    假設此時的快速行小於或等於第乙個帶有關鍵字的組,並且大於岩壁後面另乙個組中的組。

    選擇要分組的數字時,如果選擇了 a,則當 b<=a 時,b 將排在 a 之前。

    由於這種可能性,我們的演算法是不穩定的。

    另外,對朱大志來說,我們倆的教科書可能有些不同。

  3. 匿名使用者2024-01-27

    讓我們從快速排序中的最佳排序情況開始,在最好的情況下,每次我們分割槽時,我們會將乙個序列分成兩個幾乎相等的子序列,在這種情況下,每次遞迴呼叫它時,我們也會處理子序列大小的一半。 這看起來像乙個深度為 o(logn) 的完整二叉樹,因此您需要進行 o(logn) 巢狀呼叫。 但是,在同一層次結構中的兩個程式呼叫中,不會處理原始序列的同一部分。

    因此,程式呼叫的每個層次結構總共需要 o(n) 時間。 因此,在最好的情況下,該演算法的時間複雜度為 o(nlogn)。

    但是呼叫遞減資料進行遞增排序是快速排序中最糟糕的情況,您可以想象在每個分割槽之後都有乙個長度為 1 且 n-1 的子序列,這將導致我們的表示式變為:

    t(n) =o(n) +t(1) +t(n-1) =o(n) +t(n-1)

    這是時間複雜度,即 o(n)。

  4. 匿名使用者2024-01-26

    面試最基本的排序演算法。

  5. 匿名使用者2024-01-25

    我們通常所說的排序演算法通常是指內部排序演算法,其中資料記錄在記憶體中排序。

    排序演算法大致可分為兩種型別:

    一種是比較排序,時間複雜度o(nlogn)。

    o(n 2),主要包括:氣泡排序、選擇排序、插入排序、合併排序、堆排序、快速排序等。

    另一種是非比較排序,時間複雜度可達o(n),主要包括:計數排序、基數排序、桶排序等。

    我不知道你在說什麼標準,但就時間而言,快速排序在比較排序中是最快的,但它比非比較排序更快。 當然,就記憶體消耗而言,quicksort 並不是最便宜的。

  6. 匿名使用者2024-01-24

    快速排序演算法通過多次比較和交換實現排序,其排序演算法如下:

    1)首先,設定乙個分界值,通過這個分界值將陣列分為左右兩部分。

    2)將大於等於截止值的資料設定在陣列右側,將小於截止值的資料設定在陣列左側。在這種情況下,左側部分中的所有元素都小於或等於截止值,而右側部分中的所有元素都大於或等於截止值。

    3)左右兩邊的資料可以獨立排序。對於左側的陣列資料,可以取乙個分界值,將資料部分分為左右兩部分,將較小的值放在左側,較大的值放在右側。 右邊的陣列資料可以類似地處理。

    4)重複上述過程,可以看出這是乙個遞迴定義。遞迴排序左側部分後,遞迴排序右側部分。 當對左右部分的資料進行排序時,將對整個陣列進行排序。

  7. 匿名使用者2024-01-23

    如果這是乙個多項選擇題,很明顯結果應該是 c

    根據快速排序方法的規則可以看出,第一次排序完成後,小於基點的應在基點的前面,較大的應在基點的後面。

    我按照排序方法流程驗證了一下,結果和lz結果一樣,看來從問題出來的人要反省一下了,呵呵。

    我覺得試題的目的是檢查考生對知識點的理解,小的多項選擇題會花很多時間來計算,這對考生來說太不公平了,所以我會選擇C。 當然,事實證明,它的答案也有問題)

    詳細流程:541、132、984、746、518、181、946、314、205、827 共十個數字,key=518

    開始時,i=0,j=9

    1.從後到前找到小於鍵的數字,j=8(205),並用i(0)位(541)交換,結果。

    i=i+1=1

    2.當前i=1,j=8,從前到後找到大於鍵的數字,i=2(984)和j(8)位(541)互換,結果。

    j=j-1=7

    3.當前i=2,j=7,從後到前找到小於鍵的數字,j=7(314),並用i(2)位(541)交換,結果。

    i=i+1=3

    4.當前i=3,j=7,從前到後找到大於鍵的數字,i=3(746)和j(7)位(541)互換,結果。

    j=j-1=6

    5.當前i=3,j=6,從後到前找到小於鍵的數字,j=5(181),並用i(3)(541)位交換,結果。

    6.當前i=3,j=5,從前到後找到大於鍵的數字,當j==i時,掃瞄結束,結果為:

  8. 匿名使用者2024-01-22

    你是國家考試的物件嗎?

    有了快速排序的想法,無論問題如何變化,步驟都是一樣的,如果你根據 541:(205,132,314,181,518,,946,746,984,827),即你的答案,但不是基於 518。

    如果根據 827 完成:(541,132,205,746,518,181,314,,946,984)。

    這個問題需要以518為基準,有沒有可能找到以518為基準的那個?

  9. 匿名使用者2024-01-21

    繪製 n 個正方形時,將第 n 個正方形插入 n-1 個正方形中,這意味著可以插入 n-2 個空白,因為相鄰正方形的顏色不同,所以插入的顏色只能為乙個”。

    n正方形是把n個正方形插入n-1正方形的中間,所以n-1可以有n+1來填,你誤會了這個(網格中間沒問題,第乙個和最後乙個網格的外面沒問題,你錯過了這兩個)。

    第三個方格是從2個方格直接插入的,只有乙個空白,所以還有6種繪畫方式,而在這個陳述中,2個方格中有3個空白。

    從兩個插槽插入,可以有三個空插槽。

  10. 匿名使用者2024-01-20

    要找到 n 個正方形的繪畫方法,請將第 n 個正方形插入 n-1 正方形。

    這裡有乙個問題,你可以把它放在兩端。

  11. 匿名使用者2024-01-19

    我不知道我是否應該列出每個選項的步驟,但我很困惑。

    快速排序其實每次都是基於當前陣列的第乙個位置,所以第乙個位置的值的位置在中間(排序),二分法後越均勻,速度就會越快。

    首次為選項 a 選擇 21 將更改為 17,第一次更改後,它將更改:

    再執行一次轉換,您就已經井井有條了。

    與選項c同理,第乙個選擇是將21的位置改為30,更改後,它發生了變化:

    A和C第一選擇的對比和交換次數相同,因此時間取決於第二輪。

    17,9,5)和(5,9,17)誰快?它應該是(5,9,17)快一步,因為(17,9,5)必須交換一步才能變成(5,9,17),然後(5,9,17)第一步不變,然後(9,17)就剩下了,剩下的兩個時間(即5,9和9,17再次比較並全部排序)必須相同。

    所以時差在需要交換的步驟中:

    17,9,5)->5,9,17)->5,9)+(17)第一步需要3步比較和1次交換;

    5,9,17)->5,9,17)->5)+(9,17) 第一步需要3個步驟進行比較,無需交換;

    所以選擇c,看看你的圖片,我補充一下:

    答:第一步對A的解釋是錯誤的,怎麼會變成(9、17、5、21、23、25、30)?

    選項 A 將交換 25 和 9 的位置進行第一次查詢,而 9 只能出現在第二個位置。 然後交換 21 和 17,只會變成 17、9、5、21、25、23、30 啊,答案錯了!!

    另外,對於其他答案,我認為對於演算法不僅是交換的,而且比較是時間,在已經排序的序列上花費的時間是最大的,平方。

    但這些因素在較小的範圍內太多了

  12. 匿名使用者2024-01-18

    對於同樣的演算法,序列中需要交換的數字次數越少,速度越快,完全排序的序列基本上只取for迴圈,不需要交換,所以應該選擇d。

  13. 匿名使用者2024-01-17

    快速排序的原理正確嗎? 在兩個位置交換數字不是快速排序嗎,不是直接分配,直接分配肯定會覆蓋資料。

    設待排序的陣列為 a[0]......a[n-1],首先選擇任意數量的資料(通常是陣列的第乙個數字)作為關鍵資料,然後把所有小於它的數字放在它前面,把所有大於它的數字放在它後面,這個過程稱為快速排序。 需要注意的是,快速排序不是一種穩定的排序演算法,這意味著在演算法結束時,多個相同值的相對位置可能會發生變化。

    快速排序的演算法是:

    1)在排序開始時設定兩個變數i和j:i=0,j=n-1;

    2)取第乙個陣列元素作為鍵資料,給鍵賦值,即key=a[0];

    5)重複步驟,直到i=j;(在步驟 3 和 4 中,如果未找到滿足條件的值,即 3 中的 a[j] 不小於 key,4 中的 a[i] 不大於 key,請更改 j 和 i 的值,使 j=j-1 和 i=i+1 直到找到它們。 如果找到匹配項匹配的值,則交換 i、j 指標的位置不會改變。 此外,i==j 的過程必須正好在 i+ 或 j- 完成時,迴圈結束)。

相關回答
15個回答2024-06-08

寬歌的閉合線是冒泡和分類的。

19個回答2024-06-08

有一件事,你可能讀過心理學書籍,或者聽過別人的話,而且敘述很專業。 最主要的是消除緊張和猜想,你說得對,心臟病應該用心治療,你已經分析過了,只要想想好的地方,過去不可能再做,想想他做了什麼,沒必要那個,關鍵是要好好想想今天和未來的事情, 做好,凡事都想開一點,不怕錯,不怕別人說什麼,我做我自己的事,讓別人說吧!有這個想法會更好。 >>>More

9個回答2024-06-08

算了,太神奇了,乙個男人娶了你。

4個回答2024-06-08

註冊後即可答疑解惑,有專業的測評體系。 房東也是oier,他和同齡人一起散步。

7個回答2024-06-08

XP系統已經退役,你的電腦完全適合Win7安裝的64位作業系統,Win7系統會比XP系統更流暢,系統執行更穩定。 >>>More