`

眼睛直观感受几种常用排序算法

 
阅读更多

1 快速排序

介绍:

  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

  • 从数列中挑出一个元素,称为 "基准"(pivot),
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

排序效果:

详细过程:

 

 

2 归并排序

介绍:

  归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用

步骤:

  • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  • 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  • 重复步骤3直到某一指针达到序列尾
  • 将另一序列剩下的所有元素直接复制到合并序列尾

排序效果:

详细过程:

 

 

3 堆排序

介绍:

  堆积排序(Heapsort)是指利用这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

步骤:

(比较复杂,自己上网查吧)

排序效果:

详细过程:

(暂无)

4 选择排序

介绍:

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

排序效果:

详细过程:

 

 

5 冒泡排序

介绍:

  冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

排序效果:

详细过程:

 

 

6 插入排序

介绍:

  插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤:

  • 从第一个元素开始,该元素可以认为已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置中
  • 重复步骤2

排序效果:

 (暂无)

详细过程:

 

 

7 希尔排序

介绍:

  希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

  希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
  • 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

排序效果:

分享到:
评论

相关推荐

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...

    几种常见排序算法实例

    本文将详细解析标题中提及的五种排序算法:位与、选择、冒泡、插入以及qsort,并结合在VC6.0环境下进行编译实践的情况。 1. **位与排序**: 位与操作符(`&`)在某些特定场景下可用于排序,例如在整数数组中,通过...

    数据结构课程设计 比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受

    在实现测试程序时,我们可以为每种排序算法设计一个函数,记录每一步的比较和移动操作,最后统计总次数。例如,可以创建一个通用的接口,定义比较和移动的计数器,然后让每个排序算法函数调用这个接口。这样可以保证...

    用Java实现几种常见的排序算法

    根据提供的文件信息,本文将详细介绍如何使用Java语言来实现几种常见的排序算法,包括插入排序(Insert Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及希尔排序(Shell Sort)。这些排序算法在...

    几种常用的排序算法源码

    本文将详细讲解标题中提到的几种排序算法:插入排序、堆排序,以及快速排序和计数排序,这些都是在实际编程中经常使用的算法。 1. **插入排序**(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作...

    内部排序算法的比较已知技术参数和设计

    通过随机数据比较各内部排序算法的关键字比较次数和关键字移动的次数,以取得直观感受。待排序表的表长不小于100;至少要用5组不同的输入数据作比较;排序算法不少于5种; 待排序的元素的关键字为整数; 比较的指标...

    Java实现几种常见排序方法

    ### Java 实现几种常见排序方法 #### 泡泡排序(Bubble Sort) ...以上是几种常见的排序算法在 Java 中的具体实现,每种算法都有其特点和适用场景。在实际应用中可以根据具体需求选择最合适的排序算法。

    常用排序算法java演示

    7. **计数排序(Counting Sort)、桶排序(Bucket Sort)和基数排序(Radix Sort)**:这三种排序算法属于非比较型排序,不依赖于元素间的比较,而是基于特定的特性,如元素的范围、分布等。Java中实现这类排序通常...

    数据结构-排序算法性能分析

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 【基本要求】 (1)实现各种内部排序。包括冒泡排序,直接选择排序,希尔排序,快速排序,堆排序。 (2) 待排序的元素的关键字为整数...

    视觉直观感受若干常用排序算法

    直观感受几种常用排序算法,具体内容如下 1 快速排序 介绍:  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不...

    C语言实现几种排序算法

    以下是对标题和描述中提及的几种排序算法的详细解释: 1. **Shell排序**:由Donald Shell于1959年提出,是一种改进的插入排序。它通过将待排序的元素按一定的间隔分组,然后对每组进行插入排序,逐渐减小间隔,直到...

    数据结构课程设计(内部排序算法比较_C语言)

    6. **堆排序**:利用堆这种数据结构所设计的一种排序算法,可以分为大顶堆和小顶堆,适用于大数据量的排序。 7. **二路归并排序**:同样采用分治策略,将待排序序列分成若干个子序列,分别进行排序,再将这些子序列...

    java 几种常用的排序算法

    以上三种排序算法都是基于比较的排序方法,它们在实际应用中各有优缺点。选择排序虽然简单但效率较低;冒泡排序简单易懂,但性能也不高;插入排序适用于小规模数据集或者部分已排序的情况。对于大规模数据集,通常会...

    用Java实现几种常见的排序算法.txt

    下面将详细介绍这五种排序算法的原理及其实现方式。 ### 1. 插入排序(Insert Sort) #### 原理 插入排序的基本思想是将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。在其实现上,...

    几种不同排序的比较及其算法

    这里我们将深入探讨几种常见的排序算法,包括插入排序、快速排序以及堆排序,它们各自有其特点和适用场景。 首先,我们来看插入排序(Insertion Sort)。插入排序是一种简单的排序算法,其基本思想是将待排序的数据...

    C++实现常用排序算法

    在实际开发中,选择哪种排序算法取决于具体的需求,如数据规模、稳定性、空间复杂度和时间复杂度等。 总的来说,掌握这些排序算法的原理和C++实现方式,对于理解和编写高效的代码至关重要,它们是每个C++程序员必备...

Global site tag (gtag.js) - Google Analytics