單鏈表的快排實現

2021-08-07 02:28:12 字數 622 閱讀 9210

分析:

因為單鏈表只能單向前進,所以不能採用常見的快排模式。

我們只需要兩個指標p和q,初始分別為head和head.next,這兩個指標均往next方向移動,移動的過程中保持p之前的key都小於選定的key,p和q之間的key都大於選定的key,那麼當q走到末尾的時候便完成了一次支點的尋找。後面每個部分繼續遞迴實現。

**:

/**

* created by wqh on 2017/8/18.

*/public class nodequicksort

public void insert(int value)

public node partition(node start, node end)

q = q.next;

}swap(start, p);

return p;

}public void quicksort(node start, node end)

}public static void swap(node n1, node n2)

public static void main(string args)

}}class node

}

單鏈表實現快排

快排的思想 以乙個點為分割點,將陣列分割成前半部分比這個點小,後半部分比這個點大的兩部分,然後再遞迴對這兩半段進行上述同樣的操作,然後合起來 此處一般直接在原陣列中進行操作,交換元素 是一種分治的思想。轉移到鍊錶上 以乙個點為分割點,將鍊錶分割成比這個點大的大鍊錶部分,乙個比這個點小的小鍊錶部分,然...

單鏈表的快排

單鏈表的快排和普通快排都是快排 1.移動數 partition 使得左邊的都小於key,右邊的都大於key 2.反覆 下面是正常陣列的快排 def arr sort self,vector,start,end start,end 0,len vector 1 i,j start end if i j...

快排,非遞迴 單鏈表快排 單鏈表歸併

筆面的高頻問題。又是現場沒答出來,回來再馬後炮 用棧實現 1。每次把支點的右段入棧 當然只記錄該段的起始與結束標記 2。然後繼續對支點的左段重複過程1,若左段的元素小於2個,則不需要再重複1,轉到3 3。左段已排好,從棧中取出最新的右段,轉到1,若棧空則結束。如下 helloworld.cpp 定義...