zoukankan      html  css  js  c++  java
  • 【经典算法】第一回:快速排序

    1.概述

    快速排序(Quick sort) 原理:

    选取一个基数,通过一次扫描将要排序的数据分割成两部分,其中一部分所有数据都比这个基数小,另外一部分所有数据都不小于这个基数,然后按照此方法进行递归,已达到排序。

    方法步骤:

    1. 设定要排序的起始和结束位置
    2. 选一个基数,一般直接选这个起始和结束坐标的中间坐标
    3. 已这个基数为准,循环遍历集合,从起始坐标开始,把大于基数的放在基数的右边,从结束坐标开始查找,把小于基数的放在基数的左边。
    4. 一次排序后,左边的数据都小于基数,右边的都大于基数,再重新开始上面的步骤1,2,3

    2.示例

            public static void QuickSort(int[] nums, int left, int right)
            {
                if (left < right)
                {
                    int i = left;
                    int j = right - 1;
                    int middle = nums[(left + right) / 2];//中间基数
    
                    while (true)
                    {
                        while (i < right && nums[i] < middle)//从左边开始搜索第一不小于基数的值,放到右边
                        {
                            i++;
                        }
    
                        while (j > 0 && nums[j] > middle)//从右边开始搜索第一个小于基数的值,放到左边
                        {
                            j--;
                        }
                        if (i == j)
                            break;
    
                        int temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
    
                        if (nums[i] == nums[j])
                            j--;
                    }
    
                    QuickSort(nums, left, i);
                    QuickSort(nums, i + 1, right);
                }
            }
             //   int[] list = new[] { 4, 1, 2, 7, 9, 0, 8 };
             //   Sorter.QuickSort(list, 0, 7);

    作者:Qlin
    出处:http://www.cnblogs.com/qqlin/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Armbian hostname and WiFi configuration
    尼采的哲学
    深度学习 —— 使用 gensim 实现 word2vec
    sklearn preprocessing 数据预处理(OneHotEncoder)
    中英文对照 —— 饮食与美食
    matlab 常用机器学习算法的实现
    linux下svn常用指令
    Python创建删除文件
    php使用mysql和mysqli连接查询数据
    vsftpd配置文件详解
  • 原文地址:https://www.cnblogs.com/qqlin/p/2920656.html
Copyright © 2011-2022 走看看