快速排序的思想:
设置两个左右哨兵,每次取最左边的数作为基准数,然后先移动右哨兵,找出第一个比基准数小的数;之后然后移动左哨兵,找到第一个比基准数大的数,此时交换两个哨兵指向的数,然后继续移动重复上述过程,直到两个哨兵重合,交换基准数与哨兵指向的数。再接着对基准数的左右两边分别重复上述过程(可用递归实现)。
具体过程可参考博客:https://blog.csdn.net/adusts/article/details/80882649
c++实现:
#include <iostream>
using namespace std;
int QuickSort(int left, int right, int a[])
{
if (left > right)
{
return 0;
}
int i = left;
int j = right;
while (i < j)
{
while (a[j] >= a[left] && j > i)
{
j--;
}
while (a[i] <= a[left] && j > i)
{
i++;
}
if (i != j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
int temp1 = a[i];
a[i] = a[left];
a[left] = temp1;
QuickSort(left, i - 1, a);
QuickSort(i + 1, right, a);
return 1;
}
int main(int argc, char const *argv[])
{
int test[10] = {1, 3, 6, 2, 5, 1, 7, 8, 2, 9};
QuickSort(0, 10, test);
for (int i = 0; i < 10; i++)
{
cout << test[i] << endl;
}
return 0;
}