資料結構和演算法之排序四 氣泡排序

2021-08-18 16:35:55 字數 882 閱讀 7863

我們在學習排序演算法的時候或許很多人接觸到的都是冒泡和選擇這兩種排序演算法,其實真的可以說的是這兩種演算法確實是比較經典的排序方法,同時,在我的理解中,這兩個排序具有驚奇的相似點。何為氣泡排序,如果我們在家煮過水都能知道,在水即將沸騰的時候會有乙個又乙個的水泡往上冒,這個現象其實和氣泡排序還是比較相似的,今天我們來講一下這個冒泡。我們看下邊的這幅圖進行理解一下

我們可以發現所謂的冒泡其實就是使用相鄰的兩個資料進行比較,然後交換資料,讓你的第二個資料始終是兩個資料中最大的資料,這樣我們進行n-1次迴圈就會達到我們想要的效果。話不多說直接上**:

public

static

void bubblesort(int

arr)}}

}

在這裡我們還是會發現一些細節的地方,比如在我的裡層迴圈中為什麼出現-1這樣奇怪的資料,又是為什麼我要-i這樣做是為什麼。首先我們可以看到在取出兩個相鄰資料進行比較的時候我們選取的是從零開始,然後在和它的後乙個資料進行比較,那麼我們可以想象,在最後乙個資料,arr.length-1的時候,如果我們依然使用下乙個資料arr.length會不會造成陣列下標越界,所以這就是我們需要-2的原因。我們又是為什麼會-i呢,我們想一下,我們在經歷過i次排序之後,是不是預設為最後的i個資料已經是有序的了,那麼我們還需要對其中的資料進行比較麼,答案很明顯是不需要,所以為了優化一下排序,我們-i。當然在這裡**的問題是可不可以換一種寫法,不用考慮這個陣列下標越界的情況,答案是當然可以,**如下:

public

static

void bubblesort(int

arr)}}

}

我們可以看到這段**和上一段的區別就是從1開始,然後選取上乙個資料和它進行比較,這樣我們就可以完全避免陣列下標越界的情況產生,如果還不理解可以畫圖思考一下。

資料結構和演算法之排序四 氣泡排序

我們在學習排序演算法的時候或許很多人接觸到的都是冒泡和選擇這兩種排序演算法,其實真的可以說的是這兩種演算法確實是比較經典的排序方法,同時,在我的理解中,這兩個排序具有驚奇的相似點。何為氣泡排序,如果我們在家煮過水都能知道,在水即將沸騰的時候會有乙個又乙個的水泡往上冒,這個現象其實和氣泡排序還是比較相...

資料結構和演算法 排序演算法 氣泡排序

排序演算法 排序演算法,我們想要把線性表中的無序序列,排成有序序列,的演算法,就是排序演算法,排序演算法的穩定性 舉例 假設對下面的元組要以他們的第乙個數字來排序。4,1 3,1 3,7 5,6 如果你排序之後,3,1 3,7 和原來的順序一樣,就是穩定的,否則就是不穩定的,3,1 3,7 4,1 ...

資料結構 排序之冒泡演算法

初級版本 交換排序,不滿足兩兩相鄰比較,讓每乙個關鍵字和它後面的每乙個比較 效率低 public void bubble 1 int arr print arr arr 標準版本 public void bubble 2 int arr print arr arr 優化版本1 避免已經有序的情況下無...