快排
void quickSort(vector<int> &vec, int start, int end) {
if (start < end) {
int i = start, j = end-1;
int middle = (i + j) / 2;
swap(vec[end], vec[middle]);
while (i <= j) {
while (i <= j && vec[i] <= vec[end])
i++;
while (i <= j && vec[j] > vec[end])
j--;
if (i < j)
swap(vec[i], vec[j]);
}
swap(vec[i], vec[end]);
quickSort(vec, start, i - 1);
quickSort(vec, i + 1, end);
}
}
单链表快排
leetcode 148. Sort List
struct ListNode{
int val;
ListNode *next;
ListNode(int x)
: val(x), next(nullptr){
}
};
ListNode *Partition(ListNode *pBegin, ListNode *pEnd){
int key = pBegin->val;
ListNode *p = pBegin, *q = pBegin->next;
while(q != pEnd){
if(q->val < key){
p = p->next;
if(p!=q){
swap(p->val, q->val);