1. 程式人生 > >QucikSort 快速排序 分治思想 遞迴

QucikSort 快速排序 分治思想 遞迴

QucikSort

快速排序是排序演算法中效率較高的;

思路是取一個 值x,作為 基準值,然後從後往前 找到一個比它小 的值 放在左邊 第一次是( 放在它的位置上)(挖坑)

再從前往後去查詢一個比它大的值放在右邊, 依次迴圈,

直到  左邊的值全都小於 這個基準值,右邊的值全部大於這個基準值;

這個就直知道了中間值的位置  這個時候 0~left -x -right;

 

然後再用這個方法 對 左邊 和 右邊 分別進行分治;

  public static void QuickSort(int[] array,int left,int right)
        {
            if (left<right)
            {

                int x = array[left];
                int i = left;
                int j = right;

                while (j>i)
                {
                    while (j > i)
                    {
                        if (array[j] <= x)//在右邊 找到一個比x小的值 
                        {
                            array[i] = array[j];//放到左邊
                            break;
                        }
                        else
                        {
                            j--;
                        }
                    }

                    while (j > i)
                    {
                        if (array[i] > x)//在左邊找到一個 比x大的值,
                        {
                            array[j] = array[i];//放到 左邊
                            break;
                        }
                        else
                        {
                            i++;
                        }
                    }
                }

                //跳出迴圈  i==j ; 把基準書 放在中間 
                array[i] = x; // 此時  left -i  -right
                 
                QuickSort(array, left,i-1);//從0-  left-1
                QuickSort(array, left - 1, array.Length);
            }
        }