• 快速排序算法。


    http://www.cnblogs.com/huankfy/articles/1446588.html

     1    /* 快速排序
     2    ** 作者:huankfy
     3    ** 时间:2009-04-29
     4    */
     5    public class MyQuickSort
     6    {
     7        int[] data = new int[] { 10, 2, 5, 7, 3, 1, 20, 34, 4, 6, 30, 100, 23, 8 };
     8
     9
    10        public void Display()
    11        {
    12            Sort(data, 0, data.Length - 1);
    13            Console.WriteLine("快速排序结果为:");
    14            for (int i = 0; i < data.Length; i++)
    15                Console.WriteLine(data[i]);
    16        }
    17
    18        private void Sort(int[] a, int left, int right)
    19        {
    20            if (left < right)
    21            {
    22                int i = Partition(a, left, right);
    23                Sort(a, left, i - 1);
    24                Sort(a, i + 1, right);
    25            }
    26        }
    27
    28        private int Partition(int[] a, int left, int right)
    29        {
    30
    31            int tmp = a[left];
    32            while (left < right)
    33            {
    34                while (left < right && a[right] >= tmp)
    35                    right--;
    36                
    37                // 换位后不能将left+1,防止跳位
    38                if(left<right)
    39                    a[left] = a[right];
    40
    41                while (left < right && a[left] <= tmp)
    42                    left++;
    43
    44                if (left < right)
    45                {
    46                    a[right] = a[left];
    47                    // 有left < right,可将right向前推一位
    48                    right--;
    49                }
    50            }
    51
    52            a[left] = tmp;
    53
    54            return left;
    55        }
    56
    57    }
    

      

    http://www.cnblogs.com/zhujian198/archive/2008/05/13/1195016.html

    using System;
    /*
    作者:朱剑
    描写:C#实现快速排序算法
    创建日期:2006/05/08
    */
    namespace ConsoleApplication1
    {
        class DataStructDemo
        {
            static void swap(ref int a,ref int b)
            {
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            static void sort(int[] arr,int left,int right)
            {
                int i,j,s;
    
                if(left < right)
                {
                    i=left - 1;
                    j=right + 1;
                    s=arr[(i + j) / 2];
                    while(true)
                    {
                        while(arr[++i]<s);
                        while(arr[--j]>s);
                        if(i>=j)
                            break;
                        swap(ref arr[i],ref arr[j]);
                    }
                    sort(arr,left,i-1);
                    sort(arr,j+1,right);
                }
            }
                [STAThread]
            static void Main(string[] args)
            {
                    int[] arr={2,4,65,76,87,90,56,89,78};
                    sort(arr,0,arr.Length-1);
                     Console.WriteLine("            Quick Sort Test!!!");
                    for(int i=0;i<arr.Length;i++)
                    {
                        Console.WriteLine(arr[i]);
                    }
            }
        }
    }
    

      

     public static void Test快速排序()
            {
                var list = new List<int>() { 10,20,22,1,13,7,50,42,31,66,14};
                // QuickSort(ref list, 0, list.Count);
                Sort1(list, 0, list.Count);
            }
    
            public static void Sort1(List<int> list,int left ,int right)
            {
                if (left < right)
                {
                    var i = left;
                    var j = right - 1;
                    var num = list[(left + right) / 2];
                    while (true)
                    {
                        while (list[i] < num)
                        {
                            i++;
                        };
                        while (j>0&&list[j] > num)
                        {
                            j--;
                        }
                        if (i >= j)
                            break;
                        var a = list[i];
                        list[i] = list[j];
                        list[j] = a;
                    }
                    Sort1(list, left, i);
                    Sort1(list, i + 1, right);
                }
            }

    2种算法实现有细微的区别,第二个好理解一点,主要用到递归,不过整体思路是

    1,找最中间数做基准,

    2,从后往前找到第一个小于基准的索引

    3,从前往后找到第一个大于基准的索引

    4,交换2,3值的位置。

    5,从2继续向前找,从3继续向后找,各自找到第一个,交换位置,直到找到最中间

    6,从最中间位置分成A,B2部分,再分别执行1-5的步骤

     es6中的变量交换

    let x = 1;
    let y = 2;
    [x, y] = [y, x];
  • 相关阅读:
    浪潮之巅阅读笔记
    人月神话阅读笔记3
    学习报告
    人月神话阅读笔记2
    学习报告
    第十一周学习总结
    软件杯项目——手写体识别
    第十周学习进度
    第九周学习进度
    《软件架构师的12项修炼》阅读笔记
  • 原文地址:https://www.cnblogs.com/m7777/p/4014804.html
Copyright © 2020-2023  润新知