快速排序

代码
public static void QuickSort(int[] data,int low,int high)
    {
        
int i=low;
        
int j=high;
        
int tmp=data[low];
        
        
while(low<hight)
        {
            
while((low<high) && (data[high]>=tmp))
            {
                
--high;
            }
            data[low]
=data[high];
            
++low;
            
while((low<high) &&(data[low]<=tmp))
            {
                
++low;
            }
            data[high]
==data[low];
            
--high;
        }
        data[low]
=tmp;
        
if(i<low-1)
        {
            QuickSort(data,i,low
-1); 
        }
        
if(j>low+1)
        {
            QuickSort(data,low
+1,j);
        }
    }

快速排序算法的时间复杂度和每次划分的记录关系很大。如果每次选取的记录都能均分成两个相等的子序列,这样的快速排序过程是一棵完全二叉树结构(即每个结点都把当前待排序列分成两个大小相当的子序列结点,n个记录待排序列的根结点的分解次数就构成了一棵完全二叉树),这时分解次数等于完全二叉树的深度log2n。每次快速排序过程无论把待排序列这样划分,全部的比较次数都接近于n-1次,所以,最好情况下快速排序的时间复杂度为O(nlog2n)。快速排序算法的最坏情况是记录已全部有序,此时n个记录待排序列的根结点的分解次数就构成了一棵单右支二叉树。所以在最坏情况下快速排序算法的时间复杂度为O(n2)。一般情况下,记录的分布是随机的,序列的分解次数构成一棵二叉树,这样二叉树的深度接近于log2n,所以快速排序算法在一般情况下的时间复杂度为O(nlog2n)。
另外,快速排序算法是一种不稳定的排序的方法。

posted @ 2010-04-29 15:46  科睿思博  阅读(325)  评论(0编辑  收藏  举报