• 快速排序


    基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    界面:

    主要代码:

    //将原问题分解为若干个规模更小但结构与原问题相似的子问题。
            //递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
            private void btnSort_Click(object sender, EventArgs e)
            {
                try
                {
                    string beforeSort = txtBeforeSort.Text.ToString();
                    string[] sortArr = beforeSort.Split('*');
                    List<int> beforeArr = new List<int>();
                    foreach (string str in sortArr)
                    {
                        int num = int.Parse(str);
                        beforeArr.Add(num);
                    }
    
                    QuickSort(beforeArr, 0, beforeArr.Count - 1);
    
                    string afterStr = "";
                    foreach (int i in beforeArr)
                    {
                        afterStr += i.ToString() + "*";
                    }
                    txtAfterSort.Text = afterStr.Substring(0, afterStr.Length - 1);
                }
                catch (Exception ex)
                {
     
                }
            }
            private void QuickSort(List<int> arr,int left,int right)
            {
                if (left < right)
                {
                    int p = GetLocation(arr, left, right);
                    QuickSort(arr, left, p - 1);
                    QuickSort(arr, p + 1, right);
                }
            }
            private int GetLocation(List<int> arr, int left, int aim)
            {
                int beginI = left - 1;
                int beginJ = left;
                while (beginJ < arr.Count)
                {
    
                    if (beginJ == arr.Count - 1)
                    {
                        beginI++;
                        int num = arr[beginI];
                        arr[beginI] = arr[aim];
                        arr[aim] = num;
                    }
                    
                    if (arr[beginJ] < arr[aim] )
                    {
                        beginI++;
                        int num = arr[beginI];
                        arr[beginI] = arr[beginJ];
                        arr[beginJ] = num;
                    }
                    beginJ++;
                }
                return beginI;
                
            }

    步骤:

  • 相关阅读:
    随机小错2_0527
    随计小错
    C++实现读写文件
    03-树2 List Leaves (25 分)
    获取毫秒级的时间戳
    new对象时,类名后加括号与不加括号的区别
    FoxMail 7.2的邮件存储目录修改
    C/C++ 开源算法库
    VS2015的安装
    脏内存导致BUG的问题
  • 原文地址:https://www.cnblogs.com/nygfcn1234/p/3204902.html
Copyright © 2020-2023  润新知