| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 六、基础算法 -- 超快速排序 -> 正文阅读 |
|
[数据结构与算法]六、基础算法 -- 超快速排序 |
题目描述在这个问题中,您必须分析特定的排序算法----超快速排序。 该算法通过交换两个相邻的序列元素来处理 n n n 个不同整数的序列,直到序列按升序排序。 对于输入序列 您的任务是确定超快速排序需要执行多少交换操作才能对给定的输入序列进行排序。 输入格式输入包括一些测试用例。 每个测试用例的第一行输入整数 n n n,代表该用例中输入序列的长度。 接下来 n n n 行每行输入一个整数 a i a_i ai?,代表用例中输入序列的具体数据,第 i i i 行的数据代表序列中第 i i i 个数。 当输入用例中包含的输入序列长度为 0 0 0 时,输入终止,该序列无需处理。 输出格式对于每个需要处理的输入序列,输出一个整数 o p op op,代表对给定输入序列进行排序所需的最小交换操作数,每个整数占一行。 数据范围
0
≤
n
<
500000
0 \le n < 500000
0≤n<500000, 输入样例:
输出样例:
算法(归并排序)前置知识: 逆序数在一个排列中,如果一对数的前后位置与大小顺序相反,即 前面的数大于后面的数,那么它们就称为一个逆序。一个排列中 逆序的总数 就称为这个排列的逆序数。也就是说,对于 第一个例子: 2 3 4 5 6 1 的逆序数为 5,
若将该序列转化成从小到大排序,需要 第二个例子: 2 4 3 1 的逆序数为 4
若将该序列转化成从小到大排序,需要 掌握了上述知识后可以尝试一下这道题目:逆序对的数量 暴力枚举计算一个排列的逆序数的直接方法是逐个枚举逆序,同时统计个数。例如在序列 { 2, 3, 4, 5, 6,1 } 中,逆序依次为 (2,1),(3,1),(4,1),(5, 1),(6, 1) 因此该序列的逆序数为 5。但是时间复杂度为 O ( n 2 ) O(n^2) O(n2)。 归并排序在归并排序的同时计算逆序数。且该方法只是交换相邻的两个元素。所以上述问题就变成了求一个排列的逆序对数量。 首先先看一张图:
问题详解:
具体步骤
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/25 19:41:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |