• 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();
            }
  • 相关阅读:
    Linux 基础与应用教程 003(权限管理命令简单基础)
    Linux 基础与应用教程 002
    Android:监听音键并屏蔽系统的音量调节
    Android:用Seekbar来调节屏幕亮度
    Android:获得一个竖的seekbar
    python之路(4)高阶函数和python内置函数
    python之路(3)函数和匿名函数
    python之路(2)集合(set)和字符串格式化
    python之路(1)数据类型
    SD从零开始03-04
  • 原文地址:https://www.cnblogs.com/wumian1360/p/3965191.html
Copyright © 2020-2023  润新知