氣泡排序(時間複雜度分析)
氣泡排序:
public static void bubbleSort(int[] arr) {
if(arr == null || arr.length < 2) {
return;
}
for(int e = arr.length-1; e > 0; e--) {
for(int i = 0; i < e; i++) {
if(arr[i] > arr[i+1]) {
swap(arr, i, i+1 );
}
}
}
}
氣泡排序一共要進行(n-1)次迴圈,每一次迴圈都要進行當前n-1次比較
所以一共的比較次數是:
(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;
所以氣泡排序的時間複雜度是 O(n2)
相關推薦
氣泡排序(時間複雜度分析)
氣泡排序: public static void bubbleSort(int[] arr) { if(arr == null || arr.length < 2) { return; }
資料結構與演算法--蠻力法之氣泡排序與時間複雜度分析(java)
蠻力法 蠻力法又稱窮舉法和列舉法,是一種簡單直接地解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。但是蠻力法所設計的演算法時間特性往往是比較低的,典型的指數時間演算法一般都是通過蠻力
常見排序演算法的基本原理、程式碼實現和時間複雜度分析
排序演算法無論是在實際應用還是在工作面試中,都扮演著十分重要的角色。最近剛好在學習演算法導論,所以在這裡對常見的一些排序演算法的基本原理、程式碼實現和時間複雜度分析做一些總結 ,也算是對自己知識的鞏固。 說明: 1.本文所有的結果均按照非降序排列; 2.本文所有的程式均用c++實現,
堆排序的JAVA實現及時間複雜度分析
堆排序是一個比較常用的排序方式,下面是其JAVA的實現: 1. 建堆 // 對輸入的陣列進行建堆的操作 private static void buildMaxHeap(int[] array, int length) { // 遍歷所有
排序演算法——希爾排序的圖解、程式碼實現以及時間複雜度分析
希爾排序(Shellsort) 希爾排序是衝破二次時間屏障的第一批演算法之一。 希爾排序通過比較相距一定間隔的元素來工作;各躺比較所用的距離隨著演算法的進行而減小,直到只比較相鄰元素的最後一趟排序為止。由於這個原因,希爾排序有時也叫做縮減增量排序。 希爾排
常用排序演算法穩定性、時間複雜度分析
1、 選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法, 氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義? 首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資
淺談直接插入排序演算法思想以及時間複雜度分析
研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相
排序演算法 (穩定性時間複雜度分析)
1、 選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法, 氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義? 首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資
關於希爾排序的時間複雜度分析
希爾排序又叫做“縮小增量排序”,它也是一種屬於插入排序類的方法,但是在時間複雜度上又有了改進。它的基本思想是,先將整個待排序記錄分割為若干個子序列分別插入排序,待整個序列中的記錄基本有序是,,再對全體記錄進行一次插入排序。 如下是一組增量序列分別為 3 2 1 的
快速排序演算法及時間複雜度分析(原地in-place分割槽版本)
快速排序演算法一般來說是採用遞迴來實現,其最關鍵的函式是partition分割函式,其功能是將陣列劃分為兩部分,一部分小於選定的pivot,另一部分大於選定的pivot。我們將重點放在該函式上面。 partition函式總體思路是自從一邊查詢,找到小於pivot的元素,則將
快速排序及時間複雜度分析
它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料
堆排序演算法及時間複雜度分析
堆其實通常是通過一維陣列來實現的,在陣列起始下標為0的情況下,父節點i的左右子節點分別為2*i+1和2*i+2,子節點i的父節點為(i-1)/2。對堆的操作主要有建堆、調整堆、堆排序、插入和刪除堆中元素。其中調整堆是核心。下面將重點介紹兩種調整堆的方法。 向下調整堆(shi
快速排序實現以及時間複雜度分析
平均時間複雜度分析: T(1) = 1; T(n) = 2*T(n/2) + a*n;(a為常數,每次合併時,複雜度為O(n)) = 2*(2*T(n/4)+a*n/2) + a*n = 4*T(n/4) + 2*a*n = 4*(2*T(n/8)+a*n/4) + 2*a*n = 8*T(n/8) + 3
排序演算法——插入排序的圖解、程式碼實現以及時間複雜度分析
插入排序 插入排序的原理: 插入排序由N-1躺排序完成,對於p=1到N-1躺,插入排序保證從位置0到位置p的元素為已排序狀態。 插入排序的程式碼實現: /** * 插入排序的實現例程,特點是使用了泛型,可以接受任何實現了Compa
快速排序和歸併排序的時間複雜度分析——通俗易懂
# 一、前言 今天面試的時候,被問到歸併排序的時間複雜度,這個大家都知道是``O(nlogn)``,但是面試官又繼續問,怎麼推匯出來的。這我就有點懵了,因為之前確實沒有去真正理解這個時間複雜度是如何得出的,於是就隨便答了一波(理解了之後,發現面試的時候答錯了......)。 &em
1. 時間複雜度分析
一. 對資料規模又一個概念 想要在1s內解決問題: O(n2)的演算法可以處理大約104級別的資料 O(n)的演算法可以處理大約10^8級別的資料 O(nlogn)的演算法可以處理大約10^7級別的資料 保險起見,在實際中最好降一個級 空間複雜度 遞
時間複雜度分析---主定理
一直以來時間複雜度都不會算嗚嗚嗚,今天理一理 證明咱就算了,沒這腦子。對於第一種情況,舉幾個栗子: 1)例1:二叉樹的遍歷。 T(n)=2T (n/2)+Θ (1) 。 其中(a=2), (b=2), (f(n)=1
KMP演算法介紹及時間複雜度分析
概念:字串中 一個字元前面的字串 的字首與字尾的最長匹配長度(短的那個字串) 注意:字首與字尾不可以是整個子字串 例如:a b c a b c d , d位置的最長匹配長度為3,abc 與 abc 匹配 Next陣列:長度與字串長度一致,每個位置儲存對應字元的最長匹配長
遞迴演算法的時間複雜度分析
在演算法分析中,當一個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為一個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法: (1)代入法(Substitution Method)
三分查詢的時間複雜度分析
在網上搜索了一下有關三分查詢時間複雜度分析的。有人說是O(3log3(n)),但是實驗中三分比二分更耗時,所以他們就認為不能迷信時間複雜度。我現在糾正一下(僅個人分析,供網友參考): 1.二分查詢的時間複雜度:因為每次都是折半,可以構造一顆遞迴樹,共lo