// 快速排序
void quick_sort(vector<int>& a, int low, int high) {
if (low >= high) {
return;
}
auto pos = partition(a, low, high); // 取一個基準元素,將元素分爲小於基準元素的左半邊和大於基準元素的右半邊
quick_sort(a, low, pos - 1); // 對左半邊進行遞歸
quick_sort(a, pos + 1, high); // 對右半邊進行遞歸
}
// 取一個基準元素,將元素分爲小於基準元素的左半邊和大於基準元素的右半邊
int partition(vector<int>& a, int low, int high) {
if (low < high) {
int t = a[low]; // 選擇第一個爲基準元素
while (low < high) {
while (low < high && a[high] >= t) {
--high;
}
a[low] = a[high];
while (low < high && a[low] <= t) {
++low;
}
a[high] = a[low];
}
a[low] = t;
}
return low;
}
// 主函數
int main() {
vector<int> nums{ 5,2,3,1 }; // 示例
int nums_size = nums.size();
if (nums_size > 0) {
quick_sort(nums, 0, nums_size - 1);
}
for (auto it : nums) {
cout << it << " ";
}
cout <<endl;
}
快速排序,C++實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.