演算法思想:對於乙個鍊錶,以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走到末尾的時候便完成了一次支點的尋找。後面每個部...