快速排序 最坏时间复杂度

编程入门 行业动态 更新时间:2024-10-09 22:20:44

快速排序  最坏时间<a href=https://www.elefans.com/category/jswz/34/1767520.html style=复杂度"/>

快速排序 最坏时间复杂度

1.快速排序

void quick_sort(vector<>int &q, int left, int right){if(left > right)	//截止条件:左右游标相遇return;			int i = left - 1;	//-1,+1是为了后面while内保证两边端点元素加入判断int j = right + 1;int x = q[(left + right)/2];//将数据分成两部分:第一部分小于基数,第二部分大于基数while(i < j){do ++i;while(q[i] < x);		//找出左边第一个大于等于x的元素Ado --j;while(q[j] > x);		//找出右边第一个小于等于x的元素Bif(i <j) swap(q[i], q[j]);	//如果A在B的左边,则交换A和B}quick_sort(q, left, j);		//对第一部分进行快速排序quick_sort(q, j+1, right);	//对第二部分进行快速排序
}

2.稳定性

快速排序是一个不稳定排序算法

那么到底什么才是排序的稳定性呢,通俗的讲有两个相同的数A和B,在排序之前A在B的前面,而经过排序之后,B跑到了A的前面,对于这种情况的发生,我们管他叫做排序的不稳定性,而快速排序在对存在相同数进行排序时就有可能发生这种情况。

例如(5,3A,6,3B)对这个进行排序,排序之前相同的数3A与3B,A在B的前面,经过排序之后会变成(3B,3A,5,6),所以说快速排序是一个不稳定的排序

3.时间复杂度

最优情况:每一次的flag刚好都可以平分整个数组,此时的时间复杂度为O(nlogn)

最坏情况:每一次的flag刚好都是最大或者最小的数,此时的时间复杂度为O(n2)

平均情况:经过推到平均情况为O(nlogn)

更多推荐

快速排序 最坏时间复杂度

本文发布于:2024-03-09 01:56:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1723322.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:复杂度   最坏   快速   时间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!