void
quicksort
(vector<
int>
&vec,
int low,
int high)
}swap
(vec[low]
, vec[mid]);
// 保證交換到頭部的元素比樞紐元小
quicksort
(vec, low, mid -1)
;quicksort
(vec, mid +
1, high);}
// 呼叫
quicksort
(num,
0, num.
size()
-1);
struct listnode};
listnode *
createlist
(vector<
int> vec)
ptmp-
>next =
nullptr
;return phead;
}void
showlist
(listnode* phead)
cout << endl;
}
與普通的氣泡排序類似,phead1控制次數,phead2 用於比較和交換。
listnode*
bubblesortlist
(listnode* phead)
}return phead;
}// 呼叫
listnode* phead =
createlist
(vec)
;bubblesortlist
(phead)
;
和普通的快排基本上沒有區別。
void
quicksortlist
(listnode* pbegin, listnode* pend)
}swap
(pmid-
>val, pbegin-
>val)
;quicksortlist
(pbegin, pmid)
;quicksortlist
(pmid-
>next, pend);}
// 呼叫
// 將鍊錶分成兩部分進行分割
node *p1 =
mergesort
(slow-
>next)
; slow-
>next =
null
;// slow
node *p2 =
mergesort
(node)
;// 對兩段子鍊錶進行歸併
node *p0 =
(node *
)malloc
(sizeof
(node));
node *p = p0;
while
(p1 !=
null
&& p2 !=
null
)else
p = p-
>next;}if
(p1 !=
null)if
(p2 !=
null
) p = p0-
>next;
free
(p0)
;return p;
}return node;
}
鍊錶的快排 歸併排序
leetcode 148 排序鍊錶 在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 歸併法 不斷遞迴下去,最後再合併,合併有序鍊錶,建立dummy結點的技巧。c...
快速排序及acwing快排模板
快速排序是由c.a.r hoare在1960年發明的,謹以此篇向hoare大佬致敬!尋找標記 從一連串無序的元素中找到乙個標記x 交換 將小於等於x的元素都換到陣列左邊,將大於等於x的數都換到陣列右邊 分治 將此陣列分為兩個部分,使得左半邊的元素都不大於x,右半邊的數字都不小於x 遞迴 對左半邊陣列...
快排 堆排序
快速排序主要運用了二分的思想,每次選擇乙個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。void quicksort int a,int l,int r if ia i a j i while ia i temp if ia j a...