| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 数据结构——快速排序详解(C语言) -> 正文阅读 |
|
[C++知识库]数据结构——快速排序详解(C语言) |
交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序不满足次序要求时进行交换,直到整个序列全部满足要求为止。接下来要介绍的快速排序属于交换排序的一种。 【算法步骤】 快速排序的具体步骤如下: (1)选择待排序表中的第一个记录作为枢轴,将枢轴记录暂存在r[0]的位置上。附设两个指针low和high,初始时分别指向表的上界和下界(第一趟时,low=1;high=L.length)。 (2)从表的最右侧位置依次向左搜索,找到第一个关键字小于枢轴的关键字pivotkey的记录时,将其移到low处。具体操作是:当low<high时,若high所指记录的关键字大于等于pivotkey,则向左移动指针high;否则将high所指记录与枢轴记录交换。 (3)然后再从表的最左侧位置,依次向右搜索找到第一个关键字大于pivotkey的记录和枢轴记录交换。具体操作是:当low<high时,若low所指记录的关键字小于等于pivotkey,则向右移动指针low;否则将low所指记录与枢轴记录交换。 (4)重复步骤(2)和(3),直至low和high相等为止。此时low或high的位置即为枢轴在此趟排序中的最终位置,原表被分成两个子表。 【代码】
【运行结果展示】 ?【算法分析】 (1)时间复杂度:平均情况下是O(nlog2^n) (2)空间复杂度:最好情况是O(log2^n),最坏情况是O(n). 【算法特点】 (1)记录非顺次的移动导致排序方法是不稳定的。 (2)排序过程中需要定位表是下界和上界,所以适合用于顺序结构,很难用于链式结构。 (3)当n值较大时,在平均情况下快速排序是所有内部排序中速度最快的一种,所以其适合初始记录无序且n值较大的情况。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:36:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |