演算法學習之氣泡排序

2021-09-03 02:35:09 字數 1149 閱讀 8069

氣泡排序(bubblesort):迴圈遍歷要排序的元素,依次比較相鄰的兩個元素,如果他們的順序錯誤就把他們交換位置。每一次迴圈遍歷,直到陣列的末尾。因為越大的元素會經過交換到陣列的前端(公升序或降序排列),整個過程就像氣泡最終會上浮到頂端一樣,稱之為「氣泡排序」。

原理步驟:

1、比較相鄰的兩個元素。如果第乙個比第二個大就交換他們的位置。

2、對每乙個相鄰元素做同樣的工作,直到陣列的末尾,得到這組元素最大的數,交換到陣列的末尾。

3、針對所有元素重複2同樣的步驟,除了上次迴圈末尾以後的元素。

4、持續遍歷比較兩個相鄰元素,比較次數越來越小。直到沒有數字可以比較。

public int bubblesort( ) ;

for(int i = 0; i < arr.length-1; i++)

} if(!flag)

}return arr;

}

時間的複雜度:

1、如果是乙個有序的陣列包含n個元素,第一次外層迴圈後就返回,只發生內部n-1比較。這是最好的情況,此時的時間複雜度是o(n)。

2、如果是乙個逆序列的陣列包含n個元素,此時的時間複雜度o(n

²)。

雙向氣泡排序(cocktailshakersort):氣泡排序的一種變形,也是一種穩定的排序。區別:普通的氣泡排序僅是一種方向從低到高比較序列裡的每個元素,從前向後按乙個次序遍歷;雙向氣泡排序,包括兩個方向,先從前向後,再從後向前,從前向後遍歷後能激勵最後發生交換的兩個元素位子,從後向前遍歷時就從這個位子開始。讓小的浮出水面,還可以使大的沉到水底。

不同的是,普通的氣泡排序演算法僅是從低到高比較序列裡的每個元素,或者說普通的氣泡排序演算法只能每次從前向後按乙個次序進行遍歷,而shaker排序方法每次遍歷卻包括兩個方向,先從前向後再從後向前,在從前往後遍歷後能記錄最後發生交換的兩個元素位置,從後往前遍歷時就從這個位置開始。這種雙向交替比較不僅可以使小的浮上水面,同時也會使大的沉倒水底,因而較普通的冒泡演算法在效率上有所改進。

public t cocktailshakersort(t array) 

}for (int j = right; j > left; j--) }}

return array;

}

演算法學習之氣泡排序

基本思想 陣列 6,5,7,3,8,2 按從公升序排列。依次比較相鄰的兩個數,前乙個數比後乙個數大則交換位置,得到最大的數在最後。第一輪比較完後的結果為 5,6,3,7,2,8 第二輪比較得出倒數第二的數字 5,3,6,2,7,8 依次類推 package com.example.demo.othe...

演算法學習之氣泡排序法

sub bubblesorted dim k as integer randomize with worksheets sheet1 for k 1 to 100 cells k,1 int rnd 10 1 在第一列生成100個隨機整數 next for i 1 to 99 for j i 1 t...

演算法學習之氣泡排序,6174問題

排序與檢索 資料處理是計算機的強項,包括排序 檢索和統計等。6174問題 假設你有乙個各位數字互不相同的四位數,把所有數字從大到小排序後得到a,從小到大排序後得到b,然後a b替換原來這個數,最終都會得到6174。例如,從1234出發,依次可以得到4321 1234 3087,8730 378 83...