用快排思想實現單鏈表

2021-06-25 12:33:22 字數 898 閱讀 6275

演算法思想:對於乙個鍊錶,以head節點的值作為key,然後遍歷之後的節點,可以得到乙個小於key的鍊錶和大於等於key的鍊錶;由此遞迴可以對兩個鍊錶分別進行快速。這裡用到了快速排序的思想即經過一趟排序能夠將小於key的元素放在一邊,將大於等於key的元素放在另一邊;

面試回答:如果面試官問快速排序是否適合單鏈表,答案當然是不適合;但是如果問單鏈表可不可以用快速排序,答案當然是肯定的;下面貼出一段拙劣的**,希望大家修正!

struct linknode;  

};  

void quicksort(linknode* &head, linknode* &end)  

else  

p = p->next;  

pre1->next = null;  

}  //大於等於key的鍊錶

else  

else   

p = p->next;  

pre2->next = null;  

}  }  

end1 = pre1; end2 = pre2;   /*產生新鍊錶的首尾節點*/

//對左右兩個鍊錶進行遞迴快排

quicksort(head1, end1);  

quicksort(head2, end2);  

//從遞迴棧返回的時候,將key節點和左右兩個鍊錶連起來

//左右鍊錶都存在

if( end1 && head2)  

//只有左鍊錶

else

if(end1)    

//只有右鍊錶

else

if(head2)   

用單鏈表實現快排quicksort

include include using namespace std struct node typedef node ptrtonode typedef node list typedef ptrtonode position 建立鍊錶 list createlist 建立節點 ptrtonod...

單鏈表實現快排

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

單鏈表的快排實現

分析 因為單鏈表只能單向前進,所以不能採用常見的快排模式。我們只需要兩個指標p和q,初始分別為head和head.next,這兩個指標均往next方向移動,移動的過程中保持p之前的key都小於選定的key,p和q之間的key都大於選定的key,那麼當q走到末尾的時候便完成了一次支點的尋找。後面每個部...