快排之單FOR搞定

2021-08-03 07:01:21 字數 1045 閱讀 9365

單for版快排。

平常的快排就不介紹了: 進入正題

單for快排的思想和平常的快排一樣,將陣列的起作為排序的key,就是將比key小的放到key的左邊,比key大的放到key的右邊。遞迴呼叫

但是比雙for少了一層迴圈

用雙指標錯位的方式來巧妙實現  ** :  key  =  4,i 為起始 ,j為下乙個作為初始化。這裡j會迴圈到末尾,當j

swap的時候,就將小的移到了左邊,大的移到了右邊,圖中第一次迴圈4>2 i++ swap,沒有改變 ,

一次迴圈結束後j = 5 , i不動,j繼續++,j=3,3<4成立,交換,i指向的是5,5和3對調

依次類推到j加到末尾的時候,將4放到i所指的位置上就完成了一次快排操作。

上** ,根據**理解吧。 陣列版本

#include void quicksort(int *p,int begin,int end)node;

void add(node* phead,int data)

node* node1 = malloc(sizeof(node));

node1->data = data;

node1->next = null;

node *pbck = phead;

while (pbck->next!=null)

pbck->next = node1;

}void listquciksort(node * phead, node *end)

else

}int temp = phead->data;

phead->data = p1->data;

p1->data = temp;

listquciksort(phead, p1);

listquciksort(p1->next, end); }}

int main()

listquciksort(head,null );

while (head=head->next)

system("pause");

}

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

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

單鏈表的快排

單鏈表的快排和普通快排都是快排 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...

單鏈表實現快排

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