2012-09-02 88 views
1

您好我正在代碼穩定選擇排序,我已經能夠得到正確的結果,但我不知道是否有代碼中的角落案件。我正在排序的數據這樣
a [0 ] =新數據(1,'d');
a [1] =新數據(2,'c');
a [2] =新數據(3,'a');
a [3] =新數據(4,'b');
a [4] =新數據(5,'d');
a [5] =新數據(6,'c');
a [6] =新數據(8,'a');
a [7] =新數據(9,'a');
a [8] =新數據(10,'a');可以選擇穩定嗎?

你可以看到它是按數字排序的,我現在應該按字符排序。

所以那種我已經使用的數據對象的邏輯是這樣的:

找到的最小元素的循環

,我們不會隨便找最小的元素,但與最小的INT最小元素。這樣順序的元素將保持不變

即使它工作得很好,有沒有我錯過了這裏的任何角落案例?例如:讓我們先看看iTunes吧,首先我們按照歌曲的ID排序,然後我們要按他們的名字排序。我希望它能讓每件事情都清楚

+0

你能改說這個問題嗎?我不能告訴你在問什麼。另外:跳過[9]和複製[0]只是一個錯字? - 當你試圖在代碼中獲得幫助時,你需要得到這些東西的準確性;-) – John3136

回答

1

不,你沒有遺漏任何東西。這是使任何不穩定的算法穩定的標準技術:強加一個總體排序!任何關係都由第二個鍵來解決 - 這是輸入順序。我假設你在這裏正確地實施了詞典排序,從你的描述中不完全清楚。

+0

我認爲我們不同意,因爲我們用兩種不同的方式解釋了輸入數據。如果這些數字完全屬於排序程序的內部 - 由它產生並且外界從未見過 - 那麼我同意你的看法,這是一個穩定的排序。如果程序收到這些數字作爲輸入數據的一部分,並且正在利用它們恰好按升序排列的事實,那麼我認爲這不是一個穩定的排序。 – mcdowella

+0

數字的生成方式無關緊要。我想OP會手動生成它們 - 但只要它們被排序,輸出將會保持穩定。無論如何,從實際的角度來看,整個問題都是無稽之談。 OP可以使用插入排序或合併排序來穩定排序。 – ltjax

+0

我瞭解合併排序。重點是穩定排序,因爲這是非穩定的,所以我試圖實現穩定的排序和問題,我腦子裏想到的是iTunes的問題。 – Dude

0

你所描述的是對複合鍵的排序:鍵的最重要的部分是字符,鍵的最不重要的部分是數字。

這不是我所說的穩定排序。通過穩定的排序,在兩個記錄具有相同的鍵值的情況下,排序序列中的第一個記錄是原始數據中的第一個,但在您的情況下,第一個記錄是具有最小數字的那個記錄。

對於穩定的排序,如果您給出了其中數字以降序排列的數據,那麼如果兩個記錄具有相同的字母,則排序數據中的兩個記錄中的第一個記錄將是具有最大數字的記錄,因爲這是輸入數據中的第一條記錄。通過你的程序,兩者中的第一條記錄就是最小號的記錄。

+0

如果數字最初被排序(並且問題說明它們是),那麼排序將是穩定的。 – interjay

+0

看到我的評論給你的答案。在現實生活中,我想我會呼籲規範,看看程序可以假設它的輸入數據。基於我們在這裏所知道的很少,因爲你可以在不依賴輸入數據的特殊特徵的情況下獲得穩定的排序,所以我認爲只有當輸入數據遵守特定限制時才產生穩定排序的程序並不是一個穩定的程序排序數據。 – mcdowella