摘要:對于不穩定的排序算法,只需要舉出實例,就能證明其不穩定性。而對穩定排序算法,必須對算法進行分析才能判斷其是否穩定排序算法是否穩定是由具體算法決定的,穩定算法也可以在某種條件下變為不穩定算法。
分類
排序算法主要分為兩大類
比較排序,主要有:冒泡排序,選擇排序,插入排序,歸并排序,堆排序,快速排序等
非比較排序,主要有:計數排序,基數排序,桶排序等
穩定性排序算法的穩定性定義:
如果序列中有a=b,排序前a在b之前,排序后a還在b之前,則稱這種排序算法是穩定的。
對于不穩定的排序算法,只需要舉出實例,就能證明其不穩定性。而對穩定排序算法,必須對算法進行分析才能判斷其是否穩定
排序算法是否穩定是由具體算法決定的,穩定算法也可以在某種條件下變為不穩定算法。例如冒泡排序中,把交換兩數的條件變為A[i]>=A[i+1](原本是>號)
上例告訴我們,算法是由具體的人來寫的,寫的垃圾,穩定算法也能寫的不穩定常見排序算法性能表 具體排序算法分析和實例 1. 冒泡排序 介紹
重復地走訪過要排序的元素,依次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個算法的名字由來是因為越小(或越大)的元素會經由交換慢慢“浮”到數列的頂端。
步驟比較相鄰的元素,如果前一個比后一個大,就把它們兩個調換位置
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。這步做完后,最后的元素會是最大的數
針對所有的元素重復以上的步驟,除了已經排序完成的數
實例 1. 描述給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法
2. 樣例對于數組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]
3. 分析無需分析
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. 快速排序 介紹
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
步驟先從數列中取出一個數(為方便通常會選第一個數)作為基準數
逐個比較,將比這個數大的數全放到它的右邊,小于或等于它的數全放到它的左邊
再對左右區間重復第二步,直到各區間只有一個數
實例直接沿用上一題的實例,為便于閱讀,將該例子再寫一遍
1. 描述給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法
2. 樣例對于數組 [3, 2, 1, 4, 5], 排序后為:[1, 2, 3, 4, 5]
3. 分析無需分析
4. 解答文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69438.html
摘要:在此期間,移動端開發工程師可謂是風生水起,幾乎人們日常生活中接觸互聯網的途徑,都是通過一個叫的東西,基于這兩大系統平臺。而上面說的這些事情,都是當今移動端開發者的機會。 古典程序員集體恐慌 隨著2007年第一臺iPhone問世,隨后Android的猛烈跟進,蘋果和谷歌推動了長達10年的移動互聯網浪潮。在此期間,移動端開發工程師可謂是風生水起,幾乎人們日常生活中接觸互聯網90%的途徑,都...
引言 我們正處在一個知識爆炸的時代,伴隨著信息量的劇增和人工智能的蓬勃發展,互聯網公司越發具有強烈的個性化、智能化信息展示的需求。而信息展示個性化的典型應用主要包括搜索列表、推薦列表、廣告展示等等。 很多人不知道的是,看似簡單的個性化信息展示背后,涉及大量的數據、算法以及工程架構技術,這些足以讓大部分互聯網公司望而卻步。究其根本原因,個性化信息展示背后的技術是排序學習問題(Learning to ...
閱讀 1239·2021-11-11 16:55
閱讀 1537·2021-10-08 10:16
閱讀 1188·2021-09-26 10:20
閱讀 3569·2021-09-01 10:47
閱讀 2451·2019-08-30 15:52
閱讀 2682·2019-08-30 13:18
閱讀 3194·2019-08-30 13:15
閱讀 1115·2019-08-30 10:55