日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表之快排

發布時間:2024/9/30 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表之快排 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://fengchangjian.com/?p=1330

快排最核心的思想就是劃分,確定一個樞軸元素(pivot),每一趟劃分的目的就是把待排序列分為兩部分,前一部分比樞軸小(序列A),后一部分比樞軸大(序列B)。經過一趟劃分之后序列變為:{A} pivot {B}。以下是具體步驟:
1、確定每一次劃分的樞軸元素為當前待排序列的頭節點。
2、設置Slow和Fast兩個游標,Slow指向序列A中的最后一個元素,初始化為樞軸本身(待排序列頭節點)。讓Fast遍歷一遍待排序列,當所指元素比樞軸小時,將Slow往前游一格,交換Slow和Fast所指元素的值,這樣仍能保證Slow指向的元素是序列A中的最后一個元素。
3、交換Slow所指元素和樞軸元素的值。
4、對序列A和B重復步驟1~4。

下面是單鏈表快速排序算法的Java實現:
1、單鏈表節點的定義。


/*** @param ListHead 待排序列的頭節點* @param ListEnd 待排序列的尾節點*/ public static void qsort(Element ListHead, Element ListEnd) {if (ListHead == null || ListEnd == null)return;if (ListHead == ListEnd) {return;}//Slow游標,指向序列A的最末尾元素。Element Slow = ListHead;//Fast游標,用于遍歷整個待排序列。Element Fast = ListHead.next;//TempEnd游標,總是指向Slow游標的前驅節點,遞歸調用時需要。Element TempEnd = ListHead;int temp;while (Fast != ListEnd) {//當前節點的值比樞軸小,進行交換。if (Fast.data < ListHead.data) {//TempEnd游標總是指向Slow的前驅。TempEnd = Slow;Slow = Slow.next;//交換Slow和Fast游標所指的元素的值temp = Slow.data;Slow.data = Fast.data;Fast.data = temp;}Fast = Fast.next;}//交換Slow游標所指的元素和樞軸元素的值,使序列成為{A} povit {B}形式temp = ListHead.data;ListHead.data = Slow.data;Slow.data = temp;//遞歸調用qsort(ListHead, TempEnd);qsort(Slow.next, ListEnd); }

上面的代碼有點問題:


struct Node {int key;Node* next;Node(int nKey, Node* pNext): key(nKey), next(pNext){} };Node* GetPartion(Node* pBegin, Node* pEnd) {int key = pBegin->key;Node* p = pBegin;Node* q = p->next;while(q != pEnd){if(q->key < key){p = p->next;swap(p->key,q->key);}q = q->next;}swap(p->key,pBegin->key);return p; }void QuickSort(Node* pBeign, Node* pEnd) {if(pBeign != pEnd){Node* partion = GetPartion(pBeign,pEnd);QuickSort(pBeign,partion);QuickSort(partion->next,pEnd);} } QuickSort(head, NULL);

總結

以上是生活随笔為你收集整理的单链表之快排的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。