| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 快速排列算法详细解析 -> 正文阅读 |
|
|
[数据结构与算法]快速排列算法详细解析 |
|
本文讲解一种快速排列的算法以及其实现形式,之前我们的排序算法有比较排序,冒泡排序等,但是这次我们讲一个快速排序的方法消耗时间最短。 原理部分: 对于一个数组而言,我们假设排序的起点为l,重点为r,在这段数组中我们随机选择一个数字x。设定两个指针,分别指向l和r,也就是数组的两端,然后分别从两端开始向中间挪动,右端指针指向的数字大于x,则指针向左边(中间)挪动,指向下一个数组元素,如果指向的数组元素等于或者小于x,则停止指针的移动。开始左端指针的判断,如果指针指向的数字小于x,指针向右面移动一个,直到指针指向的数字大于等于x,停止指针的移动。这时交换指针指向的数组元素。然后继续指针判断向中间移动,直到两个指针相遇。 我们通过这样一个过程最终得到的数据形式为:
?这样我们这个数组就被x,分为两段了。那么我们在分开的两段中分别再找一个随机的数最为比较的对象,再将这两段各自分为两段,分到最后就完成了排序过程。 算法思路很简单,但是实现起来不是特别容易,用到迭代思维和边界处理。
接下来我们做一个完整的测试:
?我选取了一个随机数组,进行测验 ? 那么我们到了一个确定边界的时刻,很重要,可选i或j。会出现什么情况呢?
?在以i为分界点的时候,我们最终的分组失败,左边出现了大于3的数字24,而且这个数字24永远无法分到后面去了,我运行了一下代码验证了,如图:
?24永远在第一次分组的左边,最终导致算法出错!!! 所以分界点还是选j,因为j <= i,在停止对的时候我们能够保证q[j]是一定<=q[l],但是不能保证q[i]=q[l];因此选j作为分界点。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/30 15:40:44- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |