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

    快速排序在最优情况下,它的排序时间复杂度为O(nlog2n)。即每次划分序列时,能均匀分成两个子串。但最差情况下它的时间复杂度将是O(n*n)。

    快速排序是种不稳定的排序方法。

    速排序是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

    int partition(int* data, int start, int end)
    {
        if( data == NULL || start >= end )
        {
            return 0;
        }
    
        int temp = data[start]; //把第一个数作为基准
    
        while(start < end)
        {
            while(start < end && data[end] > temp) //寻找比基数小的值
                --end;
            data[start] = data[end];
    
            while(start< end && data[start] < temp) //寻找比基数大的值
                ++start;
            data[end] = data[start];
        }
        data[start]= temp;
        return start;
    }
    
    
    void QuickSort(int* data,int start,int end)
    {
        if( data == NULL || start < 0 || start >=end )
            return;
    
    
        int index = partition(data,start,end);
        
        QuickSort(data,start,index-1);
        QuickSort(data,index+1,end);
    }
  • 相关阅读:
    第03组 团队Git现场编程实战
    团队Git现场编程实战
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    第四组 团队Git现场编程实战
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/neverleave/p/2951646.html
Copyright © 2011-2022 走看看