快速排序

  快速排序时冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

  上面已经说出了快速排序的基本概念,接下来详细讲解:

  快速排序主要就是把一组数组分成2半,以数组第一个(其他的也行)数字为比较对象,其他的数值和它对比,按大小区分在它左右,然后再递归左边的(小于比较对象),接着递归右边的(大于比较对象),直到左右的INDEX相等。比如:12,58,66,24,2,8,34

  一开始以12为比较对象,在用变量来记录它两边的Index,这里用i,j。i=0,j=6

  从右往左比,比比较对象小的:

        12<34 不符合

        12>8 符合 此时 array[0]=array[5]

  替换后再从左往右比,比比较对象大的:

        8<12 不符合

        58>12 符合 此时 array[5]=array[1] array[5]为原数组8的位置

  然后依次这样比较下去 直到i==j时,即指向同一数字,这时这个INDEX就为比较对象的存放位置。

        即:8,2,12,24,66,58,34

  以上是第一次比较,接下来递归8,2和24,66,58,34直到完成整个数组排序(比到只有一个数字时就不会比较了)。

 

  代码:

  

 

代码
        static void Main(string[] args)
        {
            
//快速排序
            Console.WriteLine("请输入一串数字,用','号分隔。");
            
string str = Console.ReadLine();
            
string[] strSplit = str.Split(',');
            
int num = strSplit.Length;
            
int[] intArr=new int[num];
            
for (int i = 0; i < num; i++)
            {
                intArr[i] 
= int.Parse(strSplit[i]);
            }
            QuickSort(intArr,
0,num-1);
            
foreach (var item in intArr)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadLine();
        }

        
static void QuickSort(int[] _Arr,int _low,int _high)
        {
            
if (_low>=_high)
            {
                
return;
            }
            
int npiv = QuickSort_Once(_Arr, _low, _high);

            QuickSort(_Arr, _low, npiv
-1);
            QuickSort(_Arr,npiv
+1,_high);

        }

        
static int QuickSort_Once(int[] _Arr, int _low, int _high)
        {
            
int nPiv = _Arr[_low];
            
int i = _low;
            
int j = _high;
            
while (i<j)
            {
                
while (i < j && nPiv <= _Arr[j]) j--;
                _Arr[i] 
= _Arr[j];
                
while (i < j && nPiv >= _Arr[i]) i++;
                _Arr[j] 
= _Arr[i];
            }

            _Arr[i] 
= nPiv;
            
return i;
        }

 

          

posted on 2010-05-11 16:49  neekey  阅读(321)  评论(0)    收藏  举报

导航