快速排序(NB)

快速,排序,nb · 浏览次数 : 6

小编点评

**博客地址:** https://www.cnblogs.com/zylyehuo/# _*_coding:utf-8_*_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] # 把右边的值写到左边空位上 print(li, 'right') while left < right and li[left] <= tmp: left += 1 li[right] = li[left] # 把左边的值写到右边空位上 print(li, 'left') li[left] = tmp # 把tmp归位 return left **快速排序算法** **步骤:** 1. **递归地划分数组**:如果数组长度大于 2,则选择中间元素作为分界点。 2. **递归左半部分和右半部分**:分别对左半部分和右半部分进行排序。 3. **将两个部分的中间元素连接起来**:连接两个子数组的中间元素,形成最终排序后的结果。 **时间复杂度:**O(n log n),其中 n 是数组长度。 **示例:** ``` quick_sort([5, 7, 9, 4, 8, 3, 6, 1]) ``` **输出:**[1, 3, 4, 5, 6, 7, 9]

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# _*_coding:utf-8_*_

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]  # 把右边的值写到左边空位上
        print(li, 'right')
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]  # 把左边的值写到右边空位上
        print(li, 'left')
    li[left] = tmp  # 把tmp归位
    return left


def _quick_sort(li, left, right):
    if left < right:  # 至少两个元素
        mid = partition(li, left, right)
        _quick_sort(li, left, mid - 1)
        _quick_sort(li, mid + 1, right)


def quick_sort(li):
    _quick_sort(li, 0, len(li) - 1)


ls = [5, 7, 9, 4, 8, 3, 6, 1]

quick_sort(ls)

print(ls)

与快速排序(NB)相似的内容:

快速排序(NB)

博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ def partition(li, left, right): tmp = li[left] while left < right: while left < right and

C#快速排序算法

快速排序实现原理 快速排序(Quick Sort)是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。 其基本思路如下: 选择数组中的一个元素作为基准(pivot)。 将数组中小于等于基准的元素放在基准的左边,将大于基准的元

简述几种常用的排序算法

摘要:归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分治的思想,代码都通过递归来实现,过程非常相似。理解归并排序的重点是理解递推公式和 merge() 合并函数。 本文分享自华为云社区《深入浅出八种排序算法》,作者:嵌入式视觉 。 归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分

ACM算法竞赛代码模板(长期更新)

C++算法模板 基础算法 排序 快速排序 void quickSort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++

单链表的排序问题

单链表的排序问题 作者:Grey 原文地址: 博客园:单链表的排序问题 CSDN:单链表的排序问题 题目链接 LeetCode 148. Sort List 思路一:转换数组结合快速排序 将链表转换成数组,使用快速排序算法,然后把数组排序后的结果还原成链表。 时间复杂度 O(n*logn),空间复杂

【numpy基础】--数组排序

`numpy` 数组通常是用于数值计算的多维数组,而排序功能可以快速、准确地对数据进行排序,从而得到更加清晰、易于分析的结果。 在数据分析和处理过程中,常常需要对数据进行排序,以便更好地理解和发现其中的规律和趋势。 排序会应用在很多场景中,比如: 1. 数据分类:将数据按照一定的特征进行分类,可以通

MySQL索引

索引的概述 索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。索

基于.NetCore开发博客项目 StarBlog - (23) 文章列表接口分页、过滤、搜索、排序

## 前言 上一篇留的坑,火速补上。 在之前的第6篇中,已经有初步介绍,本文做一些补充,已经搞定这部分的同学可以快速跳过,[基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表](https://www.cnblogs.com/deali/p/16286780.ht

[转帖]shell脚本实现文本内容比较交互程序

背景介绍 脚本基于Comm命令进行功能封装,考虑到命令执行前需要对文本进行排序,并且在多文件需要比较内容时可能会导致多个文本混乱,因此使用Shell封装成了一个交互式程序,快速对文件内容进行判断和输出想要的内容内容结果。 脚本介绍 文件内容校验(是否一致内容)定制化输出文本(1.仅文本单独出现内容;

[转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)

目录 正则表达式概念正则表达式的作用元字符grep命令在文本中查找指定的字符串sort命令排序uniq命令快捷去重tr命令替换、压缩和删除cut命令快速裁剪命令expr substr 截取方法cut截取方法 split命令文件拆分paste命令文件合并eval变量扫描器位置锚定分组或其他扩展正则表达