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);
                }
            }
    
        }

    输出排序过程:

  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/25miao/p/12606241.html
Copyright © 2011-2022 走看看