`
- 浏览:
73610 次
- 性别:
- 来自:
黑龙江
-
排序方法比较
以关键字序列(265,301,751,129,937,863,742,694,076,438)为例,分别写出执行以下排序算法的各趟排序结束时,关键字序列的状态。
(1) 直接插入排序 (2)希尔排序 (3)冒泡排序 (4)快速排序
(5) 直接选择排序 (6) 堆排序 (7) 归并排序 (8)基数排序
上述方法中,哪些是稳定的排序?哪些是非稳定的排序?对不稳定的排序试举出一个不稳定的实例。
(1)直接插入排序:(方括号表示无序区)
初始态: 265[301 751 129 937 863 742 694 076 438]
第一趟:265 301[751 129 937 863 742 694 076 438]
第二趟:265 301 751[129 937 863 742 694 076 438]
第三趟:129 265 301 751[937 863 742 694 076 438]
第四趟:129 265 301 751 937[863 742 694 076 438]
第五趟:129 265 301 751 863 937[742 694 076 438]
第六趟:129 265 301 742 751 863 937[694 076 438]
第七趟:129 265 301 694 742 751 863 937[076 438]
第八趟:076 129 265 301 694 742 751 863 937[438]
第九趟:076 129 265 301 438 694 742 751 863 937
(2)希尔排序(增量为5,3,1)
初始态: 265 301 751 129 937 863 742 694 076 438
第一趟:265 301 694 076 438 863 742 751 129 937
第二趟:076 301 129 265 438 694 742 751 863 937
第三趟:076 129 265 301 438 694 742 751 863 937
(3)冒泡排序(方括号为无序区)
初始态 [265 301 751 129 937 863 742 694 076 438]
第一趟: 076 [265 301 751 129 937 863 742 694 438]
第二趟: 076 129 [265 301 751 438 937 863 742 694]
第三趟: 076 129 265 [301 438 694 751 937 863 742]
第四趟: 076 129 265 301 [438 694 742 751 937 863]
第五趟: 076 129 265 301 438 [694 742 751 863 937]
第六趟: 076 129 265 301 438 694 742 751 863 937
(4)快速排序:(方括号表示无序区,层表示对应的递归树的层数)
初始态: [265 301 751 129 937 863 742 694 076 438]
第二层: [076 129] 265 [751 937 863 742 694 301 438]
第三层: 076 [129] 265 [438 301 694 742] 751 [863 937]
第四层: 076 129 265 [301] 438 [694 742] 751 863 [937]
第五层: 076 129 265 301 438 694 [742] 751 863 937
第六层: 076 129 265 301 438 694 742 751 863 937
(5)直接选择排序:(方括号为无序区)
初始态 [265 301 751 129 937 863 742 694 076 438]
第一趟: 076 [301 751 129 937 863 742 694 265 438]
第二趟: 076 129 [751 301 937 863 742 694 265 438]
第三趟: 076 129 265[ 301 937 863 742 694 751 438]
第四趟: 076 129 265 301 [937 863 742 694 751 438]
第五趟: 076 129 265 301 438 [863 742 694 751 937]
第六趟: 076 129 265 301 438 694 [742 751 863 937]
第七趟: 076 129 265 301 438 694 742 [751 863 937]
第八趟: 076 129 265 301 438 694 742 751 [937 863]
第九趟: 076 129 265 301 438 694 742 751 863 937
(6)堆排序:(通过画二*树可以一步步得出排序结果)
初始态 [265 301 751 129 937 863 742 694 076 438]
建立初始堆: [937 694 863 265 438 751 742 129 075 301]
第一次排序重建堆:[863 694 751 765 438 301 742 129 075] 937
第二次排序重建堆:[751 694 742 265 438 301 075 129] 863 937
第三次排序重建堆:[742 694 301 265 438 129 075] 751 863 937
第四次排序重建堆:[694 438 301 265 075 129] 742 751 863 937
第五次排序重建堆:[438 265 301 129 075] 694 742 751 863 937
第六次排序重建堆:[301 265 075 129] 438 694 742 751 863 937
第七次排序重建堆:[265 129 075] 301 438 694 742 751 863 937
第八次排序重建堆:[129 075]265 301 438 694 742 751 863 937
第九次排序重建堆:075 129 265 301 438 694 742 751 863 937
(7)归并排序(为了表示方便,采用自底向上的归并,方括号为有序区)
初始态:[265] [301] [751] [129] [937] [863] [742] [694] [076] [438]
第一趟:[265 301] [129 751] [863 937] [694 742] [076 438]
第二趟:[129 265 301 751] [694 742 863 937] [076 438]
第三趟:[129 265 301 694 742 751 863 937] [076 438]
第四趟:[076 129 265 301 438 694 742 751 863 937]
(8)基数排序(方括号内表示一个箱子共有10个箱子,箱号从0到9)
初始态:265 301 751 129 937 863 742 694 076 438
第一趟:[] [301 751] [742] [863] [694] [265] [076] [937] [438] [129]
第二趟:[301] [] [129] [937 438] [742] [751] [863 265] [076] [] [694]
第三趟:[075] [129] [265] [301] [438] [] [694] [742 751] [863] [937]
在上面的排序方法中,直接插入排序、冒泡排序、归并排序和基数排序是稳定的,其他排序算法均是不稳定的,现举实例如下:以带*号的表示区别。
希尔排序:[8,1,10,5,6,*8]
快速排序:[2,*2,1]
直接选择排序:[2,*2,1]
堆排序:[2,*2,1]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### 三种排序方法比较的演示程序——Borland C++ Builder中的多线程应用 #### 摘要 本文介绍了一款由教师开发的教学辅助工具,该工具利用Borland C++ Builder平台实现了三种基本排序算法(冒泡排序、选择排序、...
在计算机科学领域,排序是处理数据的一个基本任务,它涉及到将一组元素按照特定的顺序排列。本主题将深入探讨几种常见的排序算法,并通过比较它们...通过实践和比较,我们可以更好地理解和选择适合特定问题的排序方法。
《数据结构》内排序方法比较.xlsx
总的来说,这三种排序方法都是基于比较的排序算法,它们各有特点。选择排序每次只移动一个元素,但可能需要多次交换;直接插入排序适合小规模或部分有序的数据,而冒泡排序则在某些特定情况下能体现出较好的性能。在...
排序方法比较程序的设计与实现程序设计报告
选择排序是不稳定的排序方法,因为在选择最小(或最大)元素时,可能会改变相同元素的原始顺序。其优点是实现简单,不会像冒泡排序那样移动大量元素;缺点是时间复杂度为O(n^2),效率同样很低。 插入排序...
"各种内部排序方法及其比较实验报告" 内部排序是指在计算机内存中对数据进行排序的方法。内部排序方法有很多,常见的有直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、堆排序、归并排序等。 直接插入...
### 字符串排序方法 在JavaScript以及其他的编程语言中,字符串排序是一个常见的需求。无论是对字符串数组进行排序还是对特定的字符串内部字符进行排序,掌握正确的排序方法对于开发者来说至关重要。 #### 标题:...
本文将深入探讨C语言中常见的六种排序算法:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序以及堆排序。每种排序算法都有其独特的实现方式和性能特点,适合不同的场景。 1. **起泡排序(Bubble Sort)*...
随即生成一组数据 可以实现三种排序方法的速度比较
本文将深入探讨内部排序方法,包括归并排序和快速排序的不同实现,以及C++中常见排序方法的实现和比较。同时,我们将讨论各种排序算法在不同场景下的适用性,并提供参考源代码供学习者实践和理解。 首先,归并排序...
交换排序 选择排序 冒泡排序 插入排序
本篇文章将综合比较几种常见的排序方法,包括希尔排序和快速排序,这些方法在C语言中实现。首先,我们来看一下这两种排序算法的基本概念和实现细节。 希尔排序,又称为希尔增量排序,是由Donald Shell于1959年提出...
本项目名为"各种排序方法演示",显然旨在通过Java语言展示多种不同的排序算法。以下是这些排序算法的详细介绍: 1. **Bubble Sort(冒泡排序)** - `BubbleSortAlgorithm.java` 文件中实现的冒泡排序是一种简单的...
1. 掌握各种排序的基本思想。 2. 掌握各种排序方法的算法实现。 3. 掌握各种排序方法的优劣分析及花费的...根据排序函数中的核心语句,计算出每种排序方法的时间复杂度级=及空间复杂度,分析几种排序方法的优劣。
Java排序方法是编程中不可或缺的一部分,它涉及到一系列的算法,用于将数组或列表中的元素按照特定顺序排列。这里我们将深入探讨几种常见的排序方法,包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序...
内排序是计算机科学中一种重要的算法,用于在内存中对数据进行排序。在这个数据结构报告中,我们将深入探讨...通过实验报告,我们可以分析不同算法在各种输入条件下的运行时间,从而选择最适合特定应用场景的排序方法。
* 通用排序方法 * @param arr 需要排序的数组 * @param field 排序字段 值类型传null 单字段传string 多字段传数组[["field1", SortType], ["field2", SortType]] 可传属性名 方法名 * @param sortType 排序类型...
这三种排序方法属于非比较型排序,它们不依赖元素之间的比较,而是通过统计或分配元素到特定的桶中来排序。这些方法通常在特定条件下(如元素范围有限且均匀分布)表现出极高的效率。 对于这些排序算法,我们可以...