zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序是冒泡排序的优化算法,其步骤是:
    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);
                }
            }
  • 相关阅读:
    12-单表查询
    11-数据的增删改
    10-外键的变种 三种关系
    09-完整性约束
    08-数据类型(2)
    07-数据类型
    06-表的操作
    05-库的操作
    Spring:(六) 代理模式
    Spring:(五) 注解
  • 原文地址:https://www.cnblogs.com/TheLin/p/13876885.html
Copyright © 2011-2022 走看看