首页 > 编程知识 正文

链表快速排序python,数据结构快速排序视频讲解

时间:2023-05-05 05:58:10 阅读:29340 作者:780

快速排序(英语: Quicksort )也称为分区交换排序(partition-exchange sort ),它将按一次排序排序的数据分为两个独立的部分,其中一个部分的所有数据

步骤如下。

从数列中提取一个元素,称为“原点”(pivot ),对数列进行排序。 所有元素小于基准值的位于基准之前,所有元素大于基准值的位于基准之后(相同数量可以位于任一侧)。 这个分区结束后,这个基准位于数列的中间位置。 这称为分区操作。 递归排序小于参考值的元素的子数列和大于参考值的元素的子数列。

递归的底部情况是数列的大小为零或一,即永远排序。 一直递归持续,但这个算法总是会结束。 这是因为在每次迭代中,至少有一个元素位于其最后一个位置。

具体代码为:

defquick_sort(alist,start, end ) : (快速排序) if start=end: #递归结束条件return mid=alist[start] #将开始的基准元素low=start # low从序列的左侧移动到右侧的光标hed 如果位于序列右侧末尾且从右向左移动的光标whilelowhigh:#low与high不匹配,则high (右)所指示的元素大于或等于基准元素。 high向左移动,当whilelowhighandalist [ high ]=mid : high-=1a list [ low ]=a list [ high ] #来到此位置时,high指向小于基准元素的元素,并且如果#low和high不匹配,则low指向的元素将小于基准元素。 然后,low向右移动whilelowhighandalist [ low ] mid : low=1a list [ high ]=a list [ low ] #。 此时,low指向大于基准元素的元素,将low指向的元素置于high的空闲位置。 此时,low指向的位置在此处填写high满足条件的要素#结束循环后,low与high一致。 此时,将所指位置配置在基准要素的正确位置,左侧的要素小于基准要素,右侧的要素将大于基准要素的alist[low]=mid #基准要素配置在该位置,#对基准要素的左侧的子序列进行快速排序quick _ sort (开始, low - 1 ) # start :0 low -1元基准元素的左侧一位)对基准元素右侧的子序列进行快速排序quick_sort(alist,low 1, end ) low1:元基准元素右一位end:最后if _ name _==' _ _ main _ ' : a list=[ 54,26,93,17,77,31,44 ] len (a lisin 但是,可以容易地观察到阵列元素每循环访问一次,并且使用O(n )的时间。 在使用“连接”(concatenation )的版本中,该运算也为o(n )。

在最好的情况下,每次运行分区时,将一个数列分成两个几乎相等的片段。 这意味着每次递归调用处理一半大小的数列。 因此,在大小达到1的数字序列之前,log可以嵌套调用n次。 这意味着调用树的深度是o(logn )。 但是,在同一层次结构的两个程序调用中,没有处理到原始数列的相同部分; 因此,程序调用的各个层次全部只需要o(n )的时间。 )每个调用都有一些共同的开销,但每个层只有o ) n )的调用,因此它们可以归纳为o ) n系数。 结果,该算法只能使用o(nlogn )时间。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。