快速排序基本思想:
快速排序法由于他的效率为N*logN,效率较高所以常被采用。它采用的方法为分治法,也很实用。
下面我们就来说说快速排序的基本思想:
1.算法开始先要在序列中选择一个基准点。
2.要实现序列左边的数都比这个基准点小,序列右边都比这个基准点大。
3.递归地对两个序列进行快速排序,直到序列为空或者只有一个元素。
快速排序过程演示:
给定一个数组{19,8,7,23,47,58}进行快速排序。
image.png
此时我们要先选择一个基准点,我们选择序列中第一个数字19作为基准点。
此时,i= 0,j = 5,base = a[i] = 19
从j开始向前找一个小或者等于19的数,j = 2时满足条件。
此时base = a[j]
此时数组变为{7,8,19,23,47,58}
此时左子序列为{7,8}
右子序列为{23,47,58}
分别对左右序列进行上述操作:选择基准点,使得左边的数都比这个基准点小,右边的数都比这个基准点大。递归地对两个序列进行快速排序,直到序列为空或者只有一个元素。
最后得到快速排序的结果为{7,8,19,23,47,58}
快速排序代码实现:
int quick_sort(int a[], int low, int high) {
if (low<high)
{
int i = low, j = high;
int x = a[low];
while (i<j)
{
while (i<j && a[j] >= x) //当a[j]的值大于基准点时继续向前查找。
j--;
if (i<j)
a[i++] = a[j];
while (i<j && a[i] <= x)
i++;
if (i<j)
a[j--] = a[i];
a[i] = x;
}
quick_sort(a, low, i - 1);
quick_sort(a, i + 1, high);
}