演算法思想:對於乙個鍊錶,以head節點的值作為key,然後遍歷之後的節點,可以得到乙個小於key的鍊錶和大於等於key的鍊錶;由此遞迴可以對兩個鍊錶分別進行快速。這裡用到了快速排序的思想即經過一趟排序能夠將小於key的元素放在一邊,將大於等於key的元素放在另一邊;
面試回答:如果面試官問快速排序是否適合單鏈表,答案當然是不適合;但是如果問單鏈表可不可以用快速排序,答案當然是肯定的;下面貼出一段拙劣的**,希望大家修正!
code:
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)
}
單鏈表介紹及其實現
首節點 存放第乙個有效資料的結點 尾結點 存放最後乙個有效資料的結點 尾指標指向 頭結點 頭結點的資料型別和首結點的型別一模一樣 頭結點是首節點前面的那個結點 頭結點並不存放有效資料 設定頭結點的目的是為了方便儲存資料 單鏈表的插入實現邏輯 step 1 s next p next step 2 p...
單鏈表快速排序演算法實現
單鏈表結構 typedef int elemtype typedef struct listnode list struct listnode 實現 如下 void quicksort list head,list tail p next mid q next tail quicksort head...
快速排序改進原理及其實現
快速排序是現在計算機中排序演算法相對比較快的一種演算法,在各類語言中的排序演算法大都是快速排序演算法 現在我們來講解一下快速排序的原理及其實現 快速排序最主要的思想就是,找到乙個基準點,然後把大於這個基準點的數放在後面,小於基準點的數放在前面然後根據這個基準點的位置進行遞迴分別處理前面後後面的陣列完...