步骤:
1, 先从数列中取出一个数作为基准
2, 分区过程,将比这个数大的数全放到他的右边,小于等于的全部放到他的左边
3, 在对左右区间重复第二步,直到各区间只有一个数
思想: 挖坑+填数+分治算法
int partition_get(int*a, int left, int right)
{
int i = left;
int j = right;
int key = a[left];
while (i < j)
{
while (i<j&&a[j]>key)
{
j--;
}
if (i < j)
{
a[i++] = a[j];
}
while (i < j&&a[i] < key)
{
i++;
}
if (i < j)
{
a[j--] = a[i];
}
}
a[i] = key;
return i;
}
void quick_sort(int *a, int left, int right)
{
if (left >= right)
{
return;
}
int pos = partition_get(a, left, right);
quick_sort(a, left, pos - 1);
quick_sort(a, pos + 1, right);
}
int main()
{
int a[] = { 10, 7, -1,-14,0,2, 9,3, 1, 4, 12, };
int len = sizeof(a) / sizeof(a[0]);//求数组长度
quick_sort(a,0, len-1);
for (int i = 0; i < len; i++)
{
std::cout << a[i] << std::endl;
}
return 0;
}