鏈表冒泡排序一是可以交換指針域的值,二是可以交換指針
typedef struct st_node{
int score;
struce st_node *next;
}Node,*LinkList;
LinkList createList(){
Node *head = (Node *)malloc(sizeof(Node));
if(NULL == head){
printf("內存分配失敗!"):
return NULL;
}
head->next = NULL;
return head;
}
void sortLinklist(Linklist linklist){
// 默認當前這個鏈表有頭節點
// 要接著排序的鏈表
Linklist sorted = linklist->next;
// 將原來那個鏈表變為空表,用來存放排序后的鏈表
linklist->next = NULL;
while(sorted != NULL){
Node *curr = sorted;
// 每次去排序curr就重新初始化這個prev和temp
Node *prev = linklist;
Node *temp = linklist->next;
while(temp != NULL && temp->score < curr->score){
// 原先的linklist實際是排序好的列表,一直循環到排序列表中temp的數據剛好就是插入數據的前一個
prev = temp;
temp = temp->next;
}
// 插入的新節點curr,后續指向linklist后續的節點
curr->next = temp;
prev->next = curr;
// 下次再找下一個需要排序的節點
sorted = sorted->next;
}
return;
}
為方便理解,讀者可以繪制圖形移動說明文本來理解算法邏輯過程