zoukankan      html  css  js  c++  java
  • 快速排序

    代码
    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)。
    另外,快速排序算法是一种不稳定的排序的方法。

  • 相关阅读:
    如何控制递归的深度
    判断亲密数
    还是鸡兔同笼
    幂之和
    十进制转换成八进制
    单词译码
    笔试考试系统 ____pagelist使用
    笔试考试系统 ____项目部署
    笔试考试系统 ____成绩统计
    笔试考试系统 ____错题查看
  • 原文地址:https://www.cnblogs.com/mikechang/p/1723991.html
Copyright © 2011-2022 走看看