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

    class QuickSortDemo
        {
            //快速排序
            static void Main(string[] args)
            {
                int[] arr = new int[] { 4,2,3,8,9,6,5,1,7};
                QuickSort(arr,0,8);
                Console.WriteLine("     " + string.Join(",", arr));
                Console.ReadLine();
            }
            static void QuickSort(int[] dataArray, int left, int right)
            {
                Console.WriteLine("------------------------------->快速排序被调用");
                
                if (left < right)
                {
                    Console.WriteLine("     --执行大循环--Left:{0}--Right:{1}",left,right);
                    //基准数, 把比它小或者等于它的 放在它的左边,然后把比它大的放在它的右边
                    int x = dataArray[left];  //dataArray[0]=4
                    int i = left;  //i=0;
                    int j = right; //j=8;
                    int tempNum = 0;//存放大数
    
                    while (i < j)//当i==j的时候,说明我们找到了一个中间位置,这个中间位置就是基准数应该所在的位置 
                    {
                        //从后往前比较
                        //找到了一个比基准数 小于或者等于的数子,应该把它放在x的左边
                        while (i < j)
                        {
                            tempNum = dataArray[j];
                           // Console.WriteLine("             现在的基准值为:{0}",x);
                            //最右边的数小于等于【基准数】,就把该数放到【基准数】的位置上
                            if (tempNum <= x)
                            {
    
                                Console.WriteLine("             i={0},j={1},j{1}为{2},小于基准值{3}",i,j, dataArray[j],x);
                               
                                dataArray[i] = dataArray[j];
                                Console.WriteLine("             把{0}位置的数字{1}放到{2}位置",j, dataArray[j], i);
                                break;
                            }
                            else
                            {
                                Console.WriteLine("             j为{0},j{0}为{1}不小于基准值{2},执行j--", j, tempNum,x);
                                j--;//向左移动 到下一个数字,然后做比较
                            }
                        }
                        Console.WriteLine("             "+string.Join(",", dataArray));
                        //从前往后
                        while (i < j)
                        {
                            
                            if (dataArray[i] > x)  //
                            {
                                Console.WriteLine("             i={0},j={4},i{1}为{2},大于基准值{3}", i, i, dataArray[i], x,j);
                                dataArray[j] = dataArray[i];
                                Console.WriteLine("             把{0}位置的数字{1}放到{2}位置", i, dataArray[i], j);
                                break;
                            }
                            else
                            {
                                Console.WriteLine("             i为{0},i{0}为:{1},不大于基准值{2},执行i++", i, dataArray[i],x);
                                i++;
                            }
                        }
                    
                        Console.WriteLine("             结果为:"+string.Join(",", dataArray));
                    }
                    //跳出循环 现在i==j i是中间位置
                    dataArray[i] = x;
                    Console.WriteLine("     ========>中间位置========{0}",i);
                    QuickSort(dataArray, left, i - 1);// left -i- right
                    QuickSort(dataArray, i + 1, right);
                }
                else
                {
                    Console.WriteLine("     Left为{0},Right为:{1},Left>=Right,跳出",left,right);
                }
            }
    
        }

    输出排序过程:

  • 相关阅读:
    [MySQL] 联合索引最左前缀原则的原因
    [Go]字符串转int64数值型
    [日常] 浏览器前进后退与数据结构的思想
    [Go] go下实现md5加密
    [PHP] 判断两个数组是否相同
    [Go] goland开启自动格式化和开启go modules
    [PHP] 使用strace排查接口响应速度慢过程
    [Git] git version 2以上git add .和git add -A 一样
    [PHP] 504 Gateway Time-out处理流程
    [GO] go-fly客服系统0.2.2打包编译版下载
  • 原文地址:https://www.cnblogs.com/25miao/p/12606241.html
Copyright © 2011-2022 走看看