鍊錶氣泡排序

2021-05-26 21:24:03 字數 1169 閱讀 3916

任意兩個相鄰節點p、q位置互換圖示:

假設p1->next指向p,那麼顯然p1->next->next就指向q,

p1->next->next->next就指向q的後繼節點,我們用p2儲存

p1->next->next指標。即:p2=p1->next->next,則有:

[  ]---->[p]---------->[q]---->[  ](排序前)

p1->next  p1->next->next  p2->next

圖15[  ]---->[q]---------->[p]---->[  ](排序後)

圖161、排序後q節點指向p節點,在調整指向之前,我們要儲存原p的指向節點位址,即:p2=p1->next->next;

2、順著這一步一步往下推,排序後圖16中p1->next->next要指的是p2->next,所以p1->next->next=p2->next;

3、在圖15中p2->next原是q發出來的指向,排序後圖16中q的指向要變為指向p的,而原來p1->next是指向p的,所以p2->next=p1->next;

4、在圖15中p1->next原是指向p的,排序後圖16中p1->next要指向q,原來p1->next->next(即p2)是指向q的,所以p1->next=p2;

5、至此,我們完成了相鄰兩節點的順序交換。

6、下面的程式描述改進了一點就是記錄了每次最後一次節點下沉的位置,這樣我們不必每次都從頭到尾的掃瞄,只需要掃瞄到記錄點為止。 因為後面的都已經是排好序的了。

對鍊錶進行氣泡排序的函式為:

/**************************=

功能:氣泡排序(由小到大)

返回:指向煉表表頭的指標

*************************=

*/struct student *bubblesort (struct student *head)  

}  }  p1 = head;              //把p1的資訊去掉

head = head->next;       //讓head指向排序後的第乙個節點

free (p1);          //釋放p1

p1 = null;          //p1置為null,保證不產生「野指標」,即位址不確定的指標變數

return head;  

鍊錶氣泡排序

2011 07 22 21 33 111人閱讀收藏 舉報 任意兩個相鄰節點p q位置互換圖示 假設p1 next指向p,那麼顯然p1 next next就指向q,p1 next next next就指向q的後繼節點,我們用p2儲存 p1 next next指標。即 p2 p1 next next,則...

鍊錶排序 氣泡排序

動態陣列的儲存和排序 需求 c不支援動態陣列,申明的時候,一定要指明動態陣列的大小,不能將陣列的大小設定為未知數,但是很多情況 下,資料量的大小是未知數,或者資料量的大小會隨著問題的變化而變化。解決 使用鍊錶結構來儲存資料 include stdafx.h include stdafx.h incl...

鍊錶的氣泡排序

writed by caolichen 氣泡排序練習,資料以鍊錶的結構儲存 include include 結點結構型別 typedef struct lnode slink 建立線性表,void createlink slink head,int n printf 建立線性表成功!n 氣泡排序,從...