• 快速排序算法


    public class Quick_Sort
    {
    private static int QuickSort_Once(int[] _pnArray, int _pnLow, int _pnHigh)
    {
    int nPivot = _pnArray[_pnLow]; //将首元素作为枢轴
    int i = _pnLow, j = _pnHigh;

    while (i < j)
    {
    //从右到左,寻找首个小于nPivot的元素
    while (_pnArray[j] >= nPivot && i < j) j--;
    //执行到此,j已指向从右端起首个小于nPivot的元素
    //执行替换
    _pnArray[i] = _pnArray[j];
    //从左到右,寻找首个大于nPivot的元素
    while (_pnArray[i] <= nPivot && i < j) i++;
    //执行到此,i已指向从左端起首个大于nPivot的元素
    //执行替换
    _pnArray[j] = _pnArray[i];
    }
    //推出while循环,执行至此,必定是i=j的情况
    //i(或j)指向的即是枢轴的位置,定位该趟排序的枢轴并将该位置返回
    _pnArray[i] = nPivot;
    return i;
    }

    private static void QuickSort(int[] _pnArray, int _pnLow, int _pnHigh)
    {
    if (_pnLow >= _pnHigh) return;

    int _nPivotIndex = QuickSort_Once(_pnArray, _pnLow, _pnHigh);
    //对枢轴的左端进行排序
    QuickSort(_pnArray, _pnLow, _nPivotIndex - 1);
    //对枢轴的右端进行排序
    QuickSort(_pnArray, _nPivotIndex + 1, _pnHigh);
    }

    public static void Main()
    {
    Console.WriteLine("请输入待排序数列(以\",\"分割):");
    string _s = Console.ReadLine();
    string[] _sArray = _s.Split(",".ToCharArray());
    int _nLength = _sArray.Length;
    int[] _nArray = new int[_nLength];
    for (int i = 0; i < _nLength; i++)
    {
    _nArray[i] = Convert.ToInt32(_sArray[i]);
    }
    QuickSort(_nArray, 0, _nLength - 1);
    Console.WriteLine("排序后的数列为:");
    foreach (int _n in _nArray)
    {
    Console.WriteLine(_n.ToString());
    }

    快速排序采用的思想是分治思想。

    快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

    网上抄的,复制到VS中单步执行了下,还是记不住!!

  • 相关阅读:
    cjson库的使用以及源码阅读
    Map集合 把map 集合 转成Set的方法
    JAVA 吃货联盟
    第二本 第六章 接口 采用面向接口编程组装一台计算机
    java 类和对象
    Jdk安装和环境配置
    Spring mvc 同类之间方法的互相跳转 "redirect:/manage/ManageUser";
    关于Mybatis参数传值问题(常用) 个人比较推荐第二种哦,可以减少代码量,唯一要注意的是自己传递的参数个数个顺序就好
    数据库拼接字符模糊查询语句(mybatis中运用(xml文件))
    ExpandableListAdapter实现的三程常用方式
  • 原文地址:https://www.cnblogs.com/xinshijie/p/2515403.html
Copyright © 2020-2023  润新知