快速排序
快速排序是冒泡排序的优化算法,其步骤是:
1、找到一个基准数p(选中间随机数可以避免快速排序最坏情况)
2、设置左右两个指针,然后左指针l往右找比基准数大的(或相等)的数,右指针r往左找比基准数小的(或相等)的数,两个指针交换
所在位置的元素后,继续搜索直到左右指针相遇(即跳出循环条件 l=r)
注:如果循环过程出现了l=p(或r=p),则令r--(或l++),避免死循环
3、跳出循环后,此时l=r,让l++,p-- 这样就不会出现栈溢出错误 再接着对数组(left,r)和(l,right)进行递归即可
完整代码如下:
public static void quickSort(int[] arr, int left, int right)
{
int l = left;//左指针
int r = right;//右指针
int p = arr[(l + r) / 2];//记录基准值
while (l < r)//跳出循环时 l==r 以此为界将数组分为两组 分别进行递归
{
//定义中间变量用于交换
int temp = 0;
while (arr[l] < p && l >= 0)//左指针在比基准值大或相等的值停下
{
l++;
}
while (arr[r] >p && r >= 0)//右指针在比基准值小或相等的值停下
{
r--;
}
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
if (arr[l] == p)
{
r--;
}
if (arr[r] == p)
{
l++;
}
}
l++;
r--;
if (l < right)
{
quickSort(arr, l, right);
}
if (r > left)
{
quickSort(arr, left, r);
}
}