快速排序主要使用了分治法的思想
我们首先选择一个基准数,在这里我们选数组里的第一个数,随后我们先从数组的尾部进行遍历,当遇到比基准数大的数时停止。随后从数组的头部进行遍历,遇到比数组小的数时停止。这时我们交换这两个数,一直执行这个操作直到他们相遇,把基准数与相遇位置的数交换,这时数组的左边就都是比基准数小的数,右边都是比基准数大的数了。我们再将基准数左右分开,以此类推我i们就可以得到排序完成的数组了
#include<vector>
using namespace std;
void quick_sort(vector<int>& nums, int left, int right)
{
if (left >= right)
{
return;
}
int v = nums[left]; int l = left, r = right;
while (l < r)
{
while (nums[r] >= v and r > l)
{
r--;
}
while (nums[l] <= v and r > l)
{
l++;
}
swap(nums[l], nums[r]);
}
swap(nums[l], nums[left]);
quick_sort(nums, l + 1, right);
quick_sort(nums, left, l - 1);
}
int main() {
vector<int> nums = { 7,6,5,4,3,2,1 };
quick_sort(nums, 0, 6);
for (auto num : nums) {
cout << num << " ";
}
return 0;
}
现在这个算法还有一个问题就是数组里有相同数字的话排序会bug,暂时还没想好要怎么解决,先留着,想到了在来改一下。