原來我一直都不會對鍊錶進行排序,呵呵,比較菜。今天下了很大的功夫學習對鍊錶的排序,和大家分享一下!
對鍊錶的排序主要有兩種方法:
一:只交換節點中的元素,不改變鍊錶的順序。
二:直接交換節點,不改變節點中的元素。
其中交換節點是最麻煩的,稍不注意就會出錯!而交換節點中的元素還是比較簡單的。用幾個swap( )就可以了。
單鏈表的氣泡排序法:
typedef struct linklnode, *linklist;
linklist createlink( linklist *head, int num )
return ( *head )->next;
}// createlist
// 用冒泡法對鍊錶中的節點排序
void bubblesort( linklist head )
// 節點後移
p = p->next;
prep = prep->next;
}tail = p;
}// 第乙個while
}// bubblesort
void print( linklist head )
}int main( void )
我在剛開始的時候也是沒能夠自己想出來,怎麼弄都弄不好。在網上搜了一些,終於看懂了。但是他們寫的基本沒有注釋,可讀性很差。所以我就自己寫了乙個。
單鏈表的氣泡排序法的難點在於如何實現雙重迴圈,好好理解其中那個tail的用法;以及以及如何交換節點,注意temp的用法。
下面是單鏈表通過交換資料的排序方法(雙迴圈有點像氣泡排序法):
#include
#include
#include
#include
typedef struct linklnode, *linklist;
linklist createlink( int num )
return head;
}// createlink
int listlength( linklist head )
return len;
}void sortlink( linklist *head )
// 節點後移
p = p->next;
prep = prep->next;
}}// while
}// sortlink
// 輸出鍊錶中的資料
void printlink( linklist head )
}int main( void )
單鏈表之排序單鏈表
package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...
單鏈表排序
思路1 將鍊錶中的資料存入陣列中,使用陣列進行排序,排好後再存入鍊錶中。當然這並不是這題所要考察的。但是在實際應用中卻相當有價值。因為鍊錶中的排序演算法都比較慢,進行轉存再排序也是一種很好的方法。思路2 排序演算法有 1,插入排序 簡單插入排序,希爾排序 2,交換排序 氣泡排序,快速排序 3,選擇排...
單鏈表排序
1 歸併排序 將鍊錶拆分成兩個鍊錶,遞迴,歸併,將兩個已排序鍊錶合併 public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge...