首页 > 其他分享 >快排与冒泡

快排与冒泡

时间:2022-10-30 13:44:52浏览次数:40  
标签:__ arr right list len 快排 冒泡 left

快排的实现


原理: 选取一个基点(列表第一个元素),然后从右往左对比,比这个基点小的数字放在left列表中,比基点大的数字放在right列表中
这样 left 所有元素 肯定是小于 right的所有元素的,使得两个列表有了顺序 返回 left + [基点] + right
同样的,对于left或者right内部的顺序也算一个逻辑,很容易想到使用递归一层层处理

关键点:

  • 选基点,比大小,分左右
  • 递归思想
def kp_func(ori_list: list):
    def _sort(arr_list: list):
        if not arr_list:
            return []
        base_item_value = arr_list[0]
        right = []
        left = []
        for i in range(1, len(arr_list)):
            if arr_list[i] > base_item_value:
                right.append(arr_list[i])
            else:
                left.append(arr_list[i])
        return _sort(left) + base_item_value + _sort(right)
    return kp_func(ori_list)

if __name__ == "__main__":
    kp_func([23,4,34,68,67,45,78789,245,3,45,563,4,6,56,4,5]) 
    # 返回结果  [3, 4, 4, 4, 5, 6, 23, 34, 45, 45, 56, 67, 68, 245, 563, 78789]

冒泡法排序


原理:冒泡法就比较简单了,核心思想是选举,不需要考虑太多,只要a比b大,那a就应该排到b的前面

关键点:

  • 从长度为n的列表里找出最大值max_value ,放到n列表的最右边
  • 从长度为n-1的列表里找出最大值max_value, 放到n-1列表的最右边
  • ......
def mao_pao(arr_list: list):
    current_len_num = len(arr_list)
    while current_len_num > 0:
        has_order_action = False
        for i in range(current_len_num - 1):
            if arr_list[i] > arr_list[i+1]:
              has_order_action = True
              arr_list[i], arr_list[i+1] = arr_list[i+1], arr_list[i]
        if not has_order_action:  # 如果这次没有任何两个元素交换位置,说明剩余的排序已经是有序的了
            break
        current_len_num -= 1 # 下一次从 current_len_num - 1 中找出最大的数字
    return arr_list

if __name__ == "__main__":
    mao_pao([1,4,6,35,8,5,3])
    # 返回: [1, 3, 4, 5, 6, 8, 35]

标签:__,arr,right,list,len,快排,冒泡,left
From: https://www.cnblogs.com/xiuneng/p/16841104.html

相关文章

  • js-基础排序实现(冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序)
    冒泡排序:两个指针循环,遇到不合适就交换,直到将符合要求的浮到边界functionbubbleSort(list){ for(leti=0;i<list.length;i++){ for(letj=0;j<list.length-i-1;j++)......
  • 冒泡排序
    <!DOCTYPEhtml><html>   <head>      <metacharset="utf-8">      <title></title>   </head>   <body>      <scripttype="text/......
  • 冒泡排序
    packageclass01;importjava.util.Arrays;/***冒泡排序*概述:每相邻的2个数比较,较大的数向后交换。排到最后一个位置时,它就是整个数组的最大值,第一轮结束。*......
  • 事件冒泡
    文章目录​​**事件冒泡**​​​​**事件委托**​​​​**为什么需要事件委托?**​​​​**事件委托的原理:**​​​​事件的冒泡​​​​那么如何阻止事件冒泡?​​事件冒泡......
  • 冒泡排序
    算法详解以从小到大排序为例,冒泡排序法的思路是:遍历原始数据,从第一个数开始,到倒数第二个数结束,比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数。这样便......
  • 大数据基础之java常用API二(数组元素排序,冒泡排序、Arrays类,包装类,Date类)
    (大数据基础之常用API二)1.数组元素排序1.1冒泡排序图解代码演示publicstaticvoidmain(String[]args){int[]arr={25,69,80,57,13};//遍......
  • 数据结构【c语言版】八大算法(上)图文详解带你快速掌握——希尔排序,堆排序,插入排序,选择
    数据结构之八大算法详解(1)——希尔排序,堆排序,插入排序,选择排序,冒泡排序!插入排序基本思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所......
  • 冒泡排序详解
    冒泡排序分析详细节情版importrandomdefbubble(li):foriinrange(len(li)-1):exchange=Falseforjinrange(len(li)-i-1):``......
  • 冒泡排序
    #include<stdio.h>void_sum(intarr[],intsz)//冒泡排序{ inti=0; for(i=0;i<sz-1;i++)//排序的趟数 { intj=0; intflag=1; for(j=0;......
  • Demo46_冒泡排序01
    //冒泡排序packagecom.HuanXin.array_6;publicclassDemo08_01{publicstaticvoidmain(String[]args){int[]QQ={1,4,5,6,78,9};int[]aa=AA......