思路1:
將鍊錶中的資料存入陣列中,使用陣列進行排序,排好後再存入鍊錶中。
當然這並不是這題所要考察的。但是在實際應用中卻相當有價值。因為鍊錶中的排序演算法都比較慢,進行轉存再排序也是一種很好的方法。
思路2:
排序演算法有
1, 插入排序:簡單插入排序,希爾排序
2, 交換排序:氣泡排序, 快速排序
3, 選擇排序:簡單選擇排序,堆排序
4, 歸併排序
5, 基數排序
簡單的排序演算法有插入,冒泡,選擇;
中等的有合併排序,快速排序;
複雜的有堆排序。
我實現了紅色的三種排序方法。
使用鍊錶進行排序比較繁瑣,尤其是快排,需要拆分,
當然也可以多加乙個指標指向要排序的隊尾,這樣就不用拆了。
// 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, int index )
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()
{ string str;
cout << "input the link table :"<> str;
struct node *phead = create( str );
//insert_sort( phead ); //選中即為插入排序
//merge_sort( phead->next ); //選中即為歸併排序
phead->next = quicksort( phead->next); //選中即為快速排序
cout<< "the result of sort is:" <
單鏈表之排序單鏈表
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...