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

    最近面试的时候,被问到了快速排序法。一时之间,无法想起算法来。

    重新看了书本,算法如下:

      1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;

      2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];

      3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值a[j],并与key交换;

      4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的a[i],与key交换;

      5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j+完成的最后另循环结束)

    C#代码:

           void QSort<T>(T[] array)where T :IComparable
            {
                QuackSort<T>(array, 0, array.Length-1);
            }
    
            void QuackSort<T>(T[] array,int left,int right)where T:IComparable
            {
                if (left < right)
                {
                    int middle = Partition<T>(array, left, right);
                    QuackSort<T>(array, left, middle - 1);
                    QuackSort<T>(array, middle + 1, right);
                }
            }
    
            int Partition<T>(T[] array, int left, int right)where T:IComparable
            {
                T key = array[left];
                while (left<right)
                {
                    while (left < right && key.CompareTo(array[right]) < 0)
                    {
                        right--;
                    }
                    if (left < right)
                    {
                        T temp = array[left];
                        array[left] = array[right];
                       array[right] = temp;
                        left++;
                    }
                    while (left < right && key.CompareTo(array[left]) > 0)
                    {
                        left++;
                    }
                    if (left < right)
                    {
                        T temp = array[left];
                        array[left] = array[right];
                        array[right] = temp;
                        right--;
                    }
                    array[left] = key;
                }
                return left;
            }

    调用如下:

            static void Main(string[] args)
            {
                int[] array = new int[]{ 49, 38, 65, 97, 76, 13, 27 };
                Program program = new Program();
                program.QSort<int>(array);
                foreach (var item in array)
                {
                    Console.WriteLine(item);
                }
                Console.ReadLine();
            }
  • 相关阅读:
    【软件安装】CentOS7安装Tengine_2_3_2(Nginx 1_17_0)
    【NET开发】图片处理类-仿照七牛云图片处理功能
    Chrome下flash无法显示多个的问题。
    windows搭建ftp
    windows安装RabbitMQ
    安装Mysql,开发权限,以及复制数据库
    idea打jar包
    mysql数据库——选择优化的数据类型
    mysql数据库——事务隔离级别
    Java环境变量配置
  • 原文地址:https://www.cnblogs.com/wumian1360/p/3965191.html
Copyright © 2011-2022 走看看