單鏈表的氣泡排序(簡單易懂)

2021-10-07 09:28:08 字數 1248 閱讀 1134

大家在做需要排名的專案的時候,需要把各種資料從高到低排序,如果用的氣泡排序的話,處理陣列是十分簡單的,因為陣列的儲存空間的連續的,可以通過下標就可以簡單的實現,但如果是鍊錶的話,是隨機分配的,不能像陣列那樣通過下標就直接實現。所以在這裡給大家介紹乙個簡單一點的氣泡排序

氣泡排序的是交換排序其中的一種,主要思想是每乙個元素與後乙個元素比較,若這個元素大於後乙個元素,則交換這兩個元素的位置(這裡採用從小到大排序),第一次排序後最後乙個數已經變成了最大數,再進行n-2次排序即可完成(假設有n個資料)。**如下:

void

bubblesort

(int a,

int n)}}

}

但這只適用於連續儲存空間,對於鍊錶來說,不太適用,所以接下來我將介紹乙個比較簡單的**來實現鍊錶的氣泡排序,**如下(該鍊錶是包含有頭結點的,即第乙個結點不放資料):

void

bubblesort

(node *

&l)for

(i =

0;i < count -

1;i++

)//外層迴圈,跟陣列氣泡排序一樣

tail = tail->next;

//注釋②

q = tail->next;

//注釋②

p = q->next;

//注釋②}}

}

注釋①:

1.因為通常情況下來說,我們都不知道鍊錶的結點個數,所以需要去計算出來做為迴圈的次數,如果知道的話,那也可以直接傳入引數作為count。

2.為什麼不直接用 p!=null 作為迴圈的次數呢,因為在交換後結點會混亂,接下來我會解釋。

注釋②1.這裡為什麼要採用tail作為下一步操作的重要點呢,因為如果直接通過p,和q操作,很容易重複迴圈了,但如果通過tail進行操作的話,結點始終不會有問題

剛開始結點排序如下。

當排序完成後,進行tail = tail- >next;此時tail就是下乙個結點,p和q只要按照tail的結點走,就不會出問題。

圖示如下:

所以我們借用tail這個結點,就可以達到跟陣列的氣泡排序一樣的操作。

簡單易懂的氣泡排序

這次介紹的是最簡單的氣泡排序.好了廢話不多說先看下面 先定義乙個變數,假設我們要排列下面列表中的元素的順序 i 10,4,7,2,1,9,6 先分析一下 首先先弄懂氣泡排序,兩兩相比,第一位比第二位大的話,就相互換位置,依次類推,直到最後排完的順序應該是 1,2,4,6,7,9,10 先假設第一位和...

單鏈表氣泡排序

一.題目 如題.二.package week 4 單鏈表氣泡排序 author dingding date 2017 7 3 12 25 public class sortlink solution,氣泡排序,直接交換兩個值,關鍵在於迴圈條件 private static node sort nod...

單鏈表 氣泡排序

main.c bubblesortlinkedlist headnode created by chenyufeng on 16 3 1.對帶頭結點的單鏈表進行氣泡排序,並列印 include include include typedef int elemtype typedef struct n...