摘要:對(duì)于不穩(wěn)定的排序算法,只需要舉出實(shí)例,就能證明其不穩(wěn)定性。而對(duì)穩(wěn)定排序算法,必須對(duì)算法進(jìn)行分析才能判斷其是否穩(wěn)定排序算法是否穩(wěn)定是由具體算法決定的,穩(wěn)定算法也可以在某種條件下變?yōu)椴环€(wěn)定算法。
分類(lèi)
排序算法主要分為兩大類(lèi)
比較排序,主要有:冒泡排序,選擇排序,插入排序,歸并排序,堆排序,快速排序等
非比較排序,主要有:計(jì)數(shù)排序,基數(shù)排序,桶排序等
穩(wěn)定性排序算法的穩(wěn)定性定義:
如果序列中有a=b,排序前a在b之前,排序后a還在b之前,則稱(chēng)這種排序算法是穩(wěn)定的。
對(duì)于不穩(wěn)定的排序算法,只需要舉出實(shí)例,就能證明其不穩(wěn)定性。而對(duì)穩(wěn)定排序算法,必須對(duì)算法進(jìn)行分析才能判斷其是否穩(wěn)定
排序算法是否穩(wěn)定是由具體算法決定的,穩(wěn)定算法也可以在某種條件下變?yōu)椴环€(wěn)定算法。例如冒泡排序中,把交換兩數(shù)的條件變?yōu)锳[i]>=A[i+1](原本是>號(hào))
上例告訴我們,算法是由具體的人來(lái)寫(xiě)的,寫(xiě)的垃圾,穩(wěn)定算法也能寫(xiě)的不穩(wěn)定常見(jiàn)排序算法性能表 具體排序算法分析和實(shí)例 1. 冒泡排序 介紹
重復(fù)地走訪過(guò)要排序的元素,依次比較相鄰兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們調(diào)換過(guò)來(lái),直到?jīng)]有元素再需要交換,排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫?或越大)的元素會(huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
步驟比較相鄰的元素,如果前一個(gè)比后一個(gè)大,就把它們兩個(gè)調(diào)換位置
對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大的數(shù)
針對(duì)所有的元素重復(fù)以上的步驟,除了已經(jīng)排序完成的數(shù)
實(shí)例 1. 描述給一組整數(shù),按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法
2. 樣例對(duì)于數(shù)組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]
3. 分析無(wú)需分析
4. 解答fun sortInteger(a : IntArray) { val len = a.size - 1 var alreadyNum = 0 var sortFinish = false while (alreadyNum <= len - 1 && !sortFinish) { var perSortFinish = true for (i in 1..(len - alreadyNum)) { if (a[i-1] > a[i]) { val temp = a[i-1] a[i-1] = a[i] a[i] = temp perSortFinish = false } } sortFinish = perSortFinish alreadyNum += 1 } }
public void sortIntegers(int[] A) { int len = A.length - 1; int alreadyNum = 0; boolean sortFinish = false; while (alreadyNum <= len - 1 && !sortFinish) { boolean perSortFinish = true; for (int i=1; i <= len-alreadyNum; i++) { if (A[i-1] > A[i]) { int temp = A[i-1]; A[i-1] = A[i]; A[i] = temp; perSortFinish = false; } } sortFinish = perSortFinish; alreadyNum += 1; } }2. 快速排序 介紹
通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
步驟先從數(shù)列中取出一個(gè)數(shù)(為方便通常會(huì)選第一個(gè)數(shù))作為基準(zhǔn)數(shù)
逐個(gè)比較,將比這個(gè)數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊
再對(duì)左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個(gè)數(shù)
實(shí)例直接沿用上一題的實(shí)例,為便于閱讀,將該例子再寫(xiě)一遍
1. 描述給一組整數(shù),按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法
2. 樣例對(duì)于數(shù)組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]
3. 分析無(wú)需分析
4. 解答文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69438.html
摘要:在此期間,移動(dòng)端開(kāi)發(fā)工程師可謂是風(fēng)生水起,幾乎人們?nèi)粘I钪薪佑|互聯(lián)網(wǎng)的途徑,都是通過(guò)一個(gè)叫的東西,基于這兩大系統(tǒng)平臺(tái)。而上面說(shuō)的這些事情,都是當(dāng)今移動(dòng)端開(kāi)發(fā)者的機(jī)會(huì)。 古典程序員集體恐慌 隨著2007年第一臺(tái)iPhone問(wèn)世,隨后Android的猛烈跟進(jìn),蘋(píng)果和谷歌推動(dòng)了長(zhǎng)達(dá)10年的移動(dòng)互聯(lián)網(wǎng)浪潮。在此期間,移動(dòng)端開(kāi)發(fā)工程師可謂是風(fēng)生水起,幾乎人們?nèi)粘I钪薪佑|互聯(lián)網(wǎng)90%的途徑,都...
引言 我們正處在一個(gè)知識(shí)爆炸的時(shí)代,伴隨著信息量的劇增和人工智能的蓬勃發(fā)展,互聯(lián)網(wǎng)公司越發(fā)具有強(qiáng)烈的個(gè)性化、智能化信息展示的需求。而信息展示個(gè)性化的典型應(yīng)用主要包括搜索列表、推薦列表、廣告展示等等。 很多人不知道的是,看似簡(jiǎn)單的個(gè)性化信息展示背后,涉及大量的數(shù)據(jù)、算法以及工程架構(gòu)技術(shù),這些足以讓大部分互聯(lián)網(wǎng)公司望而卻步。究其根本原因,個(gè)性化信息展示背后的技術(shù)是排序?qū)W習(xí)問(wèn)題(Learning to ...
閱讀 1285·2021-11-11 16:55
閱讀 1548·2021-10-08 10:16
閱讀 1206·2021-09-26 10:20
閱讀 3587·2021-09-01 10:47
閱讀 2465·2019-08-30 15:52
閱讀 2693·2019-08-30 13:18
閱讀 3204·2019-08-30 13:15
閱讀 1141·2019-08-30 10:55