快速排序

快速排序是冒泡排序的优化算法,其步骤是:
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);
            }
        }
       
    
  
posted @ 2020-10-26 09:44  这总没有了吧  阅读(31)  评论(0编辑  收藏  举报