首页 > 编程语言 >数据结构与算法-快速排序

数据结构与算法-快速排序

时间:2024-05-23 22:54:00浏览次数:16  
标签:tmp 排序 li 算法 right 列表 数据结构 left

快速排序特点 :快

思路

    1.取第一个元素p,使元素p归位;

    2.列表被p分成两部分,左边都比p小,右边都比p大;

    3.递归完成排序.

快速排序的效率:O(nlogn)

 代码实现:

def partition(li,left,right):
    tmp=li[left]
    while left<right:
        while left<right and li[right]>=tmp: #从右边找比tmp小的数
            right-=1  # 往左走一步
        li[left]=li[right]  # 把右边的值写到左边空位上 此时开始找右边要填的值
        while left<right and li[left]<=tmp:
            left+=1  # 往右走一步
        li[right]=li[left]  # 把左边的值写到右边空位上
    li[left]=tmp   # 把tmp归位
    return right
def quick_sort(data,left,right):
    if left<right: # 最少有两个元素
        mid = partition(data,left,right)
        quick_sort(data,left,mid-1)
        quick_sort(data,mid+1,right)
    return data

li=[1,5,6,7,8,9,4,2,3]
print(quick_sort(li,0,len(li)-1))

总结:

        该算法通过选择一个基准元素,并根据它将列表分成两个子列表来对列表进行排序,子列表根据它们是否小于或大于基准元素进行划分。然后递归地对子列表进行排序。partition 函数用于根据基准元素对列表进行分区,quick_sort 函数递归地对子列表进行排序。最后,返回排序后的列表。

标签:tmp,排序,li,算法,right,列表,数据结构,left
From: https://blog.csdn.net/Xxy_1008/article/details/139047145

相关文章

  • 卡尔的算法训练营day2,数组2
    第一题做错了,还是边界值的问题。忘记存草稿了。题号997publicstaticintfindJudge(intn,int[][]trust){int[]judgeCandidate=newint[n+1];int[]othersCandidate=newint[n+1];for(inti=0;i<trust.length;i++){//二维数组......
  • 不闭合三维TSP:成长优化算法GO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • 不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • 程序分享--常见算法/编程面试题:分发糖果
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 每日一练——颜色分类(快慢指针排序)
    目录题目代码分析案例模拟重难点分析自检复习 题目75.颜色分类-力扣(LeetCode)代码//交换函数,交换指针a和指针b指向的整数voidswap(int*a,int*b){intt=*a;*a=*b;*b=t;}voidsortColors(int*nums,intnumsSize){//双指针......
  • 进程理论、进程与程序的区别、调度算法、进程的创建,状态,终止
    【一】进程理论【1】什么是进程(1)理论正在进行的一个过程或者说一个任务而负责执行任务则是cpu(2)单任务一个单独的任务单核+多道,实现多个进程的并发执行一段时间段只能做一件事:铺床、吹头发、睡觉(cpu同一时间只能干一个活)(3)多任务一段时间可以做很多件事铺......
  • 买卖股票相关算法-动态规划-python
    要求1:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不......
  • elasticsearch使用Sort排序时Please use a keyword field instead.
    具体报错信息ElasticsearchStatusException[Elasticsearchexception[type=search_phase_execution_exception,reason=allshardsfailed]];nested:ElasticsearchException[Elasticsearchexception[type=illegal_argument_exception,reason=Textfieldsarenotoptimised......
  • 代码随想录算法训练营第二天|977(双指针),209(滑动窗口),59(螺旋矩阵)
    977.有序数组的平方**1.数组中有正有负,且本身有序。平方后,较大值从两边来比较取出。**2.使用头尾指针方法。209.长度最小的子数组**1.从数组中找符合要求的连续子数组**2.滑动窗口方法:本质为快慢双指针,快指针不断前进直到子数组满足要求,然后慢指针前进直到子数组不满足......
  • 常见的排序算法——归并排序(五)
    本文记述了自然的两两归并排序并给出了一份参考实现代码。在说明了算法的性能后用随机数据进行了验证。◆思想自然的归并排序是自底向上的。先从第一个元素开始找到一个有序的子范围,然后从紧接着的后面元素开始找到另一个有序的子范围,将这两个子范围归并成一个大的有序子范围。......