快速排序

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

    }

输出排序过程:

原文地址:https://www.cnblogs.com/25miao/p/12606241.html