1分钟搞定QuickSort算法

 
QuickSort是一种递归排序的算法,每一次迭代的过程是,
从序列中选出一个元素midvalue,把所有比它小的放在它的前面,大于等于它的放在它的后面。
然后再对前半个序列和后半个序列分别做同样的事。
参数start和endlist中要进行排序的子列的起始元素下标和结束元素下标。
以下实现中,一趟排序的过程为:
选第一个元素的值作为midvalue;
border是一个下标变量,意义是border右边的元素大于等于midvalue,此时border=1;
依次判断后面的所有元素,如果大于等于midvalue,就应当插入到border的右边,同时border+1;
当所有元素判断完后,是这么个情况:
[midvalue] [values < midvalue] [values >= than midvalue]
                     border->|
此时border是最后一个小于midvalue的元素的下标。
最后把第一个元素和border一交换,大功告成。
代码
static   void  Main( string [] args)
        {
            
// test1();
            
// List<int> li = new List<int>();
            
// li[18] = 99;
            
// test2();

            
// int[] list = { 5, 4, 1, 3, 2, 7, 6 };
            
// int[] list = {6,5};
            
// int[] list = { 5,5,5};
            
// int[] list = {7,6,5,4,3,2,1 };
            
// int[] list = { 7,6,6,5,5,4,4,3,3,2,2,1,1};
            
// int[] list = { 6, 5, 1, 2, 7, 3, 6, 9, 8 };
             int [] list  =   new   int [ 200 ];
            Random rand 
=   new  Random();
            
for  ( int  i  =   0 ; i  <   200 ; i ++ )
            {
                list[i] 
=  rand.Next( 120 );
            }
            QuickSort(list, 
0 , list.Length  -   1 );

            Console.Read();


        }

        
private   static   void  QuickSort( int [] list,  int  start,  int  end)
        {
            
if  (start  >=  end)  return ;
            
int  midvalue  =  list[start]; // 为了性能
             int  border  =  start; // border右边是大于等于midvalue的第一个元素
             for  ( int  i  =  start  +   1 ; i  <=  end; i ++ )
            {
                
if  (list[i]  <  midvalue)  // 需要放到border左边
                {
                    Swap(list, i, 
++ border);
                }
            }
            Swap(list, border, start);
            QuickSort(list, start, border 
-   1 );
            QuickSort(list, border 
+   1 , end);

        }

        
private   static   void  Swap( int [] list,  int  i,  int  j)
        {
            
int  temp  =  list[i];
            list[i] 
=  list[j];
            list[j] 
=  temp;
        }

 

你可能感兴趣的:(Quicksort)