排序算法(一):快速排序算法

array和list的排序算法对比():快速排序 般来说,我们讨论排序都是针对数组结构。数组的特点是:可以很方便地进行随机访问,但是增删元素比较耗时。因此,针对数组的排序,通常会避免元素的增删操作,改为元素交换。同时,常采用二分的方法实现高效排序算法。 链表与数组相反,随机访问非常耗时,但增删元素很简单。因此链表的排序和数组也会有所不同。 这篇博客针对数组和链表的不同,分析了常用排序算法——快速排序在数组和链表中的实现。注:我们规定排序的语义 阅读详情

快速排序算法原理:

快速排序算法是冒泡排序的一种改进,快速排序也是通过逐渐消除待排序的无序序列逆序元素来实现排序的。

快速排序算法的思想很简单,在序列中任意挑选一个元素作为key,把序列中其它比key小的元素放key左边(左序列),比key大的元素放key右边(右序列),然后对左序列跟右序列也进行同样的操作,直到整个序列排序完成。

快速排序算法的步骤:

(1)挑选序列arr中的某个元素(通常是第一个)作为基准元素key,然后设置两个指针left指向序列第一个元素,right指向序列最后一个元素。

(2)起初选择从右边开始遍历,如果arr[right]>=key,right的指向向左移动一位(right--);

                                                    如果arr[right]<key,就让arr[left]=arr[right],然后改从左边开始遍历。

(3)从左边开始遍历,如果arr[left]<=key,left的指向向右移动一位(left++);

                                     如果arr[left]>key,就让arr[right]=arr[left],然后改从右边开始遍历。

(4)重复(2)(3)直到left>=right,就使arr[left]=key。

(5)然后对key的左序列跟右序列也进行(1)(2)(3)(4)(5),直到整个序列排序完。

 

快速排序算法的python实现

class Quick_sort(object):
    def quick_sort(self,a,left,right):
        if left>right:
            return
        position = self.quick_sort_once(a,left,right)
        self.quick_sort(a, left, position - 1)
        self.quick_sort(a, position + 1, right)
        return a

    def quick_sort_once(self,a,left,right):
        if left>right:
           return
        key = a[left]
        while left<right:
            while left<right and a[right]>=key:
                right -= 1
            a[left] = a[right]
            while left<right and a[left]<=key:
                left += 1
            a[right] = a[left]
        a[left] = key
        return left
                  
arr = [7,9,1,2,3,6,8,10]
quicksort = Quick_sort()
quicksort.quick_sort(arr,0,len(arr)-1)  

 

【软件分享】天若OCR文字识别V4.48(翻译功能免费) 软件简介 吾爱破解论坛大佬天若幽心开发的款OCR文字识别工具。支持快速截图识别,以及文本翻译。 下载地址 蓝奏云盘:点击下载 百度网盘:点击下载(密码:4dm4) 坚果云盘:点击下载 天翼云盘:点击下载 微软云盘:点击下载 使用教程 1、下载后对压缩包进行解压 2、双击天若OCR文字识别.exe 3、发现桌面右下角出现软件图标 4、双击软件图标即可开始截图识别 原帖地址 https://www.52pojie.cn/thread-692917-1-1.html ... 阅读详情

相关推荐

OSG 核心详解

OpenSceneGraph (OSG) 的核心架构、场景图管理以及几何体的绘制

qq_45859163的博客 715

小学生图解排序算法:②选择排序

选择排序是种简单直观的排序算法。它的工作原理是每次从待排序的数据元素中选出最小(或最大)的个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

纯文笔记 885

Photocaster导入插件

非常好用的director插件 可用于PS分层导入图片,省时省力

小学生图解排序算法:⑤快速排序

快速排序(Quicksort)是对冒泡排序的种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过趟排序将要排序的数据分割成独立的两部分,其中部分的所有数据都比另外部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

纯文笔记 964

来看看!是不是你小学二年级就学过的排序算法

结尾有福利!!扫码进群领会员付费课程免费学数据结构与算法之经典排序算法准备好了吗?起来学习吧!冒泡排序冒泡排序(Bubble Sort)是基于交换的排序,它重复走过需要排序的元素,依...

实验楼 327

小朋友学数据结构-10大排序算法(2):直接插入排序

、基本思想 在要排序的组数中,假设前面(n-1)[n&gt;=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 举例:数组a[] = {57, 68, 59, 52}。 比较方法是每个数与前面的数比较。 第个57,前面没有数,不用比较。 第二个数68,与前面的57比较,因为68 &gt; 57,所以不用换位置。 第三...

小树学信奥 811

十大经典排序算法-快速排序算法详解

、什么是快速排序 1.概念 快速排序(Quick Sort)是从冒泡排序算法演变而来的,实际上是在冒泡排序基础上的递归分治法。快速排序在每轮挑选个基准元素,并让其他比它大的元素移动到数列边,比它小的元素移动到数列的另边,从而把数列拆解成了两个部分 2.算法原理 这是个无序数列:4、5、8、1、7、2、6、3,我们要将它按从小到大排序。按照快速排序的思想,我们先选择个基准元素,进行排序 我们选取4为我们的基准元素,并设置基准元素的位置为index,设置两个指针left和right,分别指向最左

qq_35344198的博客 8万+

排序算法快速排序

快速排序的第种实现(单指针移动,挖空填数) 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有定难度的,因为本人就自己的理解对快速排序作了...

程序员之路-Stay Hungry. Stay Foolish. 61

精通八大排序算法系列:快速排序算法

精通八大排序算法系列:快速排序算法 作者 July 二零月四日------------------------------------------ 写此八大排序算法系列之前,先说点题外话。每写篇文章,我都会遵循以下几点原则:、保持版面的尽量清晰,力保排版良好。二、力争所写的东西,清晰易懂,图文并茂三、尽最大可能确保所写的东西精准,有实用价值。 ...

dinongxu8804的博客 3044

排序算法快速排序

1.快速排序的思想 先从数列中取出个数作为基准数(简单起见就选第个数) 分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治) 再对左右两边的区重复第步和第二部操作,直到各区间只有个数(递归) 简单来说就是: 快速排序 = 冒泡 + 分治 + 递归 索引 0 1 2 3 数值 11 18 10 ...

ko8be24的博客 360

高级排序算法):快速排序详解

通过这篇文章,我们学习了快速排序的核心思想、分区方法以及完整实现。快速排序是基于分治法的高效算法,但它的性能依赖于分区点的选择,因此需要适当优化。

CHENWENFEIc的博客 667

算法 - 快速排序(Quick_sort)

快速排序(Quick_sort)的特点就是:序列越乱越快,越有序越慢。最优情况:O(nlogn)每趟排序数据元素都能被平均分配成两个部分,形成个完美的二叉树。最坏情况:O()也就是原序列相对最有序的情况,形成的树只有左子树和右子树,比较次数为:(n - 1) + (n - 2) + (n - 3)+……+ 1 = n * (n - 1)/2空间复杂度:O(1)..................

曾铎的博客 9517

排序算法 - 快速排序(4种方法实现)

本文介绍了快速排序算法的挖坑法,前后指针法,左右指针法,非递归实现,以及使排序算法效率提高的三数取中

originalHSL的博客 1万+

图解快排——快速排序算法(quick sort)

快速排序算法是对冒泡排序算法种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 4万+

快速排序算法讲解

原理介绍 本次讲解结合 《清华大学PYthon》的部分PPT演示以及本人的神仙手绘。 代码演示 本次代码演示包括python实现和C语言实现

weixin_61576710的博客 968

快速排序(QuickSort)算法介绍

算法简介快速排序(Quicksort)是对冒泡排序的种改进算法。由C. A. R. Hoare在1960年提出。该算法使用广泛、效率很高,是最重要的排序算法。该算法的实现基本可分为以下几步:

wthfeng的专栏 6万+

快速排序及优化

普通快速排序(以升序为例): 每轮排序选择个基准点进行分区:让小于基准点的元素的进入个分区,大于基准点的元素的进入另外个分区,当分区完成时,基准点元素的位置就是其最终位置; 在子分区内重复以上过程,直到子分区元素个数少于等于1。 实现方式 1. 单边循环快排 a. 选择最右元素作为基准点元素; b. j指针负责找到比基准点小的元素,旦找到则与i进行交换; c. i指针维护小于基准点元素的边界,也是每次交换的目标索引; d. 最后基准点与i交换,i即为分区位置。 import java.util

星空下的那个人影 607
上一篇: WGAN原理分析
下一篇: 排序算法(二):冒泡排序
nekoli
博客等级 码龄10年 4粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值