**
思路1:
將鍊錶中的資料存入陣列中,使用陣列進行排序,排好後再存入鍊錶中。
當然這並不是這題所要考察的。但是在實際應用中卻相當有價值。因為鍊錶中的排序演算法都比較慢,進行轉存再排序也是一種很好的方法。
思路2:
排序演算法有
1, 插入排序:簡單插入排序,希爾排序
2, 交換排序:氣泡排序, 快速排序
3, 選擇排序:簡單選擇排序,堆排序
4, 歸併排序
5, 基數排序
簡單的排序演算法有插入,冒泡,選擇;
中等的有合併排序,快速排序;
複雜的有堆排序。
我實現了紅色的三種排序方法。
使用鍊錶進行排序比較繁瑣,尤其是快排,需要拆分,
當然也可以多加乙個指標指向要排序的隊尾,這樣就不用拆了。
[cpp]view plain
copy
print?
// linktable.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
#include
using
namespace
std;
//鍊錶的結構體
struct
node
; //建立鍊錶
struct
node * create( string & str_link )
return
phead;
} //輸出鍊錶
void
out_link(
struct
node * phead )
cout << endl;
} //找到第index個元素
struct
node * find_node(
struct
node* phead,
intindex )
return
pnode;
} //檢查鍊錶有無環
//有,則返回快慢指標共同指向的點
//無,則返回空指標
struct
node * check_loop(
struct
node * phead )
} return
null;
} //去掉重複元素
void
delete_repeat_element(
struct
node * phead )
else
//沒有出現過,則置出現標記
} delete
hashtable;
//釋放資源
} //插入排序
void
insert_sort(
struct
node* phead)
if( pnode == pcur )
//說明已排好序佇列中沒有比當前元素大的元素
else
//將pcur結點插入到pnode之前,即ppre之後
} } //歸併排序
//pnode 為待排序鍊錶的第乙個元素
//找中間結點
struct
node * find_mid_node(
struct
node * pnode )
return
pslow;
} //合併之後,pnode1為表頭
void
merge(
struct
node* &pnode1,
struct
node* pnode2)
if( !pnode2 )
return
; struct
node *pnode = null;
struct
node *phead = null;
if( pnode1->val < pnode2->val )
//找到表頭
else
pnode = phead;
while
( pnode1 && pnode2 )
else
pnode = pnode->next;
} if
( !pnode1 )
pnode->next = pnode2;
else
pnode->next = pnode1;
pnode1 = phead;
} //注意,這裡的pnode是需要變的,所以用了引用,可能不太好理解
//如果讓返回值指向排行序的表頭可能會好一些
void
merge_sort(
struct
node * &pnode )
//快速排序
//劃分函式
//輸入:煉表頭, 輸出:新的煉表頭,選中的結點
struct
node * patition(
struct
node * pnode,
struct
node * &pselect )
else
//如果不是第乙個
} else
ppre = pscan;
pscan = pscan->next;
} }
if( flag == 0 )
// 所有元素都比選中的大,即選中的為表頭
return
pselect;
else
return
phead;
} struct
node * quicksort(
struct
node * pnode )
else
//分兩個部分,pselect前面的和後面的
} void
test()
int_tmain(
intargc, _tchar* argv)
單鏈表之排序單鏈表
package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...
單鏈表排序
1 歸併排序 將鍊錶拆分成兩個鍊錶,遞迴,歸併,將兩個已排序鍊錶合併 public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge...
單鏈表排序
思路 sort排序函式執行一次,將鍊錶倆倆之間比較大小,比較之後,大的在後,小的在前 鍊錶節點之間只交換內容,節點不動 只有鍊錶的所有倆倆相鄰之間都是小的在前,大的在後,才返回true,否則返回false。while sort head include include include include...