排序算法 - 快速排序

基本思想

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

  

posted @ 2019-08-15 21:32  WindSun  阅读(305)  评论(0编辑  收藏  举报
博客已停更,文章已转移,点击访问