ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

排序算法——快速排序

2021-03-18 13:01:09  阅读:121  来源: 互联网

标签:right 元素 列表 算法 left 此时 排序 快速 指针


排序算法还有一个重要的排序就是快速排序,快速排序最重要的特点就是“快”。那么今天范范老师带领大家来掌握这个快速排序。

快速排序的思想如下:在列表中取一个元素A(初始时选择列表中第0位的元素),是该元素A放入到列表合适的位置(即保证列表被元素A分为两个部分,左边部分要全部比元素A小,右边部分要全部比元素A大)。以此类推最终完成将无序的列表变为有序的列表。

具体的我们举例说明:

创建一个无序的列表,默认在列表的第0位上创建一个left指针,在列表的第5位上创建一个right指针,如下图所示:

image.png

此时我们从列表中抽取列表中第0位的元素3作为tmp值从列表中拿走并存起来,此时列表中产生了一个空位,如下图所示:

image.png

此时right指针指向的元素大于元素3,所以其向左移动一位去找比元素3小的元素,当right指正移动到列表的第4位时发现该位的元素2小于元素3,此时将元素2放入到列表的第0位上(即元素3空出来的位置),如下图所示:

image.png

image.png

此时left指针指向的是元素2,其比元素3小,所以其向右移动一位去寻找列表中比元素3大的元素,当left移动到列表的第1位上时发现该位置的元素4比元素3大,此时将该元素移动到right指针指向的位置上即列表的第4位上也就是原来元素2的位置上,如下图所示:

image.png

此时right指针指向的元素是4,其比3大,所其向左移动一位去寻找列表中比元素3小的元素,当right移动到列表的第3位上发现该位置的元素1比元素3小,此时将该元素移动到left指针指向的位置上即列表的第1位上也就是原来元素4的位置上,如下图所示

image.png

此时left指针指向的元素是1,其比元素3小,所以向右移动一位去寻找列表中比元素3大的元素,当left移动到列表的第2位上发现该位置的元素5比元素3大,此时将该元素移动到right指针指向的位置上即列表的第2位上也就是原来元素1的位置上,如下图所示:


image.png

此时我们向左移动right指针发现此时right=left,此时这个位置就是存放元素3的位置,此时该位置我们也打上一个指针mid,如下图所示:此时我们发现元素3的左边全比它小,而它的右边全比它大

image.png

此时我们惊奇的发现,此时列表还是无序的,那么接下来我们开始第二轮快速排序,此时我们将列表分为两个无序的区域,一个是21 另一个是547

接下来我们从21这个无序区域进行快速排序

image.png

此时我们从列表中抽取列表中第0位的元素2作为tmp值从列表中拿走并存起来,此时列表中产生了一个空位,如下图所示:

image.png

此时right指针寻找比元素2小的元素,此时发现列表的第1位元素1小于元素2,此时将元素2移动到left指针指向的位置即列表第0位,如下图所示
image.png

此时left指针向右移动,此时发现left=right,此时这个位置就是存放元素2的位置,此时该位置我们也打上一个指针mid,如下图所示:此时我们发现元素2的左边全比它小,而它的右边全比它大

image.png

接下来我们从547区域进行快速排序

image.png

此时我们从列表中抽取列表中第0位的元素5作为tmp值从列表中拿走并存起来,此时列表中产生了一个空位,如下图所示:

image.png

此时right指针指向元素是7,其比5大,所以其向左移动一位去寻找列表中比元素5小的元素,当right移动到列表的第1位是发现该元素4小于元素5,此时将该元素4移动到left指针指向的位置即列表的第0位,如下图所示

image.png

此时left指针的元素是4,其小于元素5,那么其向右移动一位去寻找列表中比元素5大的元素,移动一位后发现和right指针重合,即left=right此时发现这个位置就是存放元素5的位置,此时该位置我们也打上一个指针mid,如下图所示:此时我们发现元素5的左边全比它小,而它的右边全比它大

image.png

最终完成了该列表的排序,如下图所示:

image.png


接下来我们用代码来实现快速排序:

image.png

spacer.gifimage.png

运行结果如下所示:

image.png


标签:right,元素,列表,算法,left,此时,排序,快速,指针
来源: https://blog.51cto.com/15134242/2663916

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有