排序算法 - 快速排序

基本思想

每趟使表的第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)。

  

转载于:https://www.cnblogs.com/WindSun/p/11360721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值