• 快速排序


    快速排序是冒泡排序的优化算法,其步骤是:
    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);
                }
            }
  • 相关阅读:
    制作Autorun的CD
    Sybase ASE MDA tables 装不上怎么办?
    对于TStringList.Find函数,我有话要说
    HH.exe CHM Operator Command.
    Delphi 7的一些常用的快捷键
    Explain Plan
    在Delphi中的Log
    subst windows下实用的磁盘映射工具
    Excel 2007 如何冻结多行&多列
    LinqToDataTable[转]
  • 原文地址:https://www.cnblogs.com/TheLin/p/13876885.html
Copyright © 2020-2023  润新知