zoukankan      html  css  js  c++  java
  • 排序算法

    基本思想

    趟使表的第1个元素放入适当位置(归位),并且左边的元素小于这个元素,右面的元素大于这个元素,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长为0或1(递归出口)。

     快速排序递归树

    算法代码

     1 void QuickSort(int *arr,int left,int right)
     2 {
     3     int l = left;
     4     int r = right;
     5     int temp = arr[left];    //基准值
     6     if(l<r)    //第一次传参判断有效性
     7     {
     8         while (l!=r)
     9         {
    10             while (l<r&&arr[r]>=temp)
    11             {
    12                 r--;
    13             }
    14             arr[l] = arr[r];
    15             while(l<r&&arr[l]<=temp)
    16             {
    17                 l++;
    18             }
    19             arr[r] = arr[l];
    20         }
    21         arr[l] = temp;
    22         QuickSort(arr, left, l - 1);
    23         QuickSort(arr, l + 1, right);
    24     }
    25 }

    算法分析

     最好情况:

     

    此时时间复杂度为O(nlog2n),空间复杂度为O(log2n)。

     最坏情况:

     

    此时时间复杂度为O(n2),空间复杂度为O(n)

     平均情况:

     

    结论: 快速排序的平均时间复杂度为O(nlog2n) 。

    平均所需栈空间为O(log2n)。

      

  • 相关阅读:
    使用PyDNS查询
    C#结构体
    使用CreateProcess函数运行其他程序
    运算符重载
    C#学习抽象类和方法
    sed命令使用
    Python For Delphi 示例
    建立Socket
    使用 lambda 函数
    C#接口实现
  • 原文地址:https://www.cnblogs.com/WindSun/p/11360721.html
Copyright © 2011-2022 走看看