快速排序

Posted savennist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

简单的了解以下快排:

参考的讲解网址:https://blog.csdn.net/nrsc272420199/article/details/82587933

1、稳定性问题     首先大家应该都知道快速排序是一个不稳定排序算法,那么到底什么才是排序的稳定性呢,我认为通俗的讲有两个相同的数A和B,在排序之前A在B的前面,而经过排序之后,B跑到了A的前面,对于这种情况的发生,我们管他叫做排序的不稳定性,而快速排序在对存在相同数进行排序时就有可能发生这种情况。例如(5,3A,6,3B)对这个进行排序,排序之前相同的数3A与3B,A在B的前面,经过排序之后会变成(3B,3A,5,6),所以说快速排序是一个不稳定的排序

2、时间复杂度问题

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

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

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

我的代码:

 1 #include<cstring>
 2 #include<cstdio>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 int qksort(int* A,int left,int right)
 7 {
 8     if(left>=right)return 0;
 9     //终止条件是>=的运算符
10     int p=A[left];
11     //printf("->>%d
",p);
12     int low=left,high=right;
13     while(low!=high)
14     {
15         while(high>low&&A[high]>=p)high--;
16         A[low]=A[high];
17         while(low<high&&A[low]<=p)low++;
18         A[high]=A[low];
19         //while判断条件需要格外注意。
20         //首先要判断的是low与high的大小关系
21         //其次要注意第二条件中允许了 等于 这一条件,否则遇到相同的数据会死循环
22     }
23     A[low]=p;
24     qksort(A,left,low-1);
25     qksort(A,low+1,right);
26     return 0;
27 }
28 
29 int quick_sort(int* A,int* Aend)
30 {
31     int lenth=Aend-A;
32     qksort(A,0,lenth-1);
33     return 0;
34 }
35 
36 int main()
37 {
38     int aim[]={6,69,4,8,3,69,12,63,42};
39     quick_sort(aim,aim+9);
40     for(int i=0;i<9;i++)
41         printf("%d ",aim[i]);
42     printf("
");
43     return 0;
44 }

 

ok

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具