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

    实现:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _008_快速排序
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48,65 };
                QuickSort(data,0,data.Length-1);
                for (int i = 0; i < data.Length; i++)
                {
                    Console.Write(data[i] + " ");
                }
            }
    
            private static void QuickSort(int[] dataArray, int left, int right)
            {
                if (left < right)
                {
                    int middle = partition(dataArray, left, right);
                    QuickSort(dataArray, left, middle - 1);
                    QuickSort(dataArray, middle + 1, right);
                }
            }
    
            /// <summary>
            /// 对数据dataArray中索引从left到right之间得数做排序
            /// </summary>
            /// <param name="data">要排序得数组</param>
            /// <param name="left">要排序数据得开始索引</param>
            /// <param name="right">要排序数据得结束索引</param>
            private static int partition(int[] dataArray, int left,int right)
            {
                //基准数
                //把比它小或者等于它的 放在它的左边 
                //比它大的 放在它的右边
                int x = dataArray[left];
                while (left<right)//当left=right说明我们找到了 中间位置,这个中间位置就是基准数应该所在的位置
                {
                    //从后往前比较 (从右向左比较)找一个比x小(或者等)的数字,放在我们的坑里,坑位于left的位置
                    while (left < right && dataArray[right] >= x) 
                        right--;//向左移动 到下一个数字,然后做比较
                    //当循环跳出时就找到一个比基准数 小于或者等于的数,应该把它放在x的左边
                    dataArray[left] = dataArray[right];
    
                    //从前往后比较 (从左向右比较)找一个比x大的数字,放在我们的坑里,现在的坑位于j的位置
                    while (left < right && dataArray[left] <= x)
                        left++;//向右移动 到下一个数字,然后做比较
                    //当循环跳出时就找到一个比基准数 大于数,应该把它放在x的右边
                    dataArray[right] = dataArray[left];
                }
    
                //跳出循环 现在left==right left是中间位置
                dataArray[left] = x; //left-x-right
                return left;
            }
        }
    }
  • 相关阅读:
    Java NIO中的缓冲区Buffer(二)创建/复制缓冲区
    Java NIO中的缓冲区Buffer(一)缓冲区基础
    Java中的反射
    Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
    Spring Data JPA例子[基于Spring Boot、Mysql]
    Spring Session
    Spring Data Redis示例
    Spring IO Platform简介及示例
    使用Spring Boot开发 “Hello World” Web应用
    2017/01/13,今天正好是开通博客园一周年,谈谈自己的一些想法
  • 原文地址:https://www.cnblogs.com/rongweijun/p/8126091.html
Copyright © 2011-2022 走看看