2016 - 2024

感恩一路有你

快速排序算法c语言 快速排序法c语言?

浏览量:1486 时间:2022-12-21 19:50:51 作者:采采

快速排序算法c语言 快速排序法c语言?

快速排序法c语言?

快速排序是一种基于分治技术的重要排序算法。排序算法根据元素的值来划分元素。

划分是对给定数组中的元素进行重新排序,使得A [s] A[s]A[s] A [s] A [s]左边的所有元素,而A [s] A[s]A[s] A [s]右边的所有元素

显然,在划分建立之后,A [s] A[s]A[s]已经在有序数组中处于它的最终结果中。接下来,我们可以继续分别对A[s]A[s]A[s]A[s]A[s]A[s]之前的子数组进行排序(例如,使用相同的方法)

请注意,它与合并排序的不同之处在于:

在归并排序算法中,快速地将问题分成两个子问题,算法的主要工作是合并子问题的解。

在快速排序中,算法的主要工作是划分阶段,不需要合并子问题的解。

c语言中四种排序方法的优劣?

快速排序

快速排序是一种局部排序、分治和大规模递归算法。本质上,它是合并排序的就地版本。快速排序可由以下四个步骤组成。

(1)如果没有超过1个数据,直接返回。

(2)一般选取序列最左边的值作为支点数据。

(3)将序列分成两部分,一部分大于支点数据,另一部分小于支点数据。

(4)利用递归对数列进行两边排序。

快速排序比大多数排序算法都快。虽然在某些特殊情况下我们可以写出比快速排序更快的算法,但是一般情况下没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说不是一个好的选择。

2合并排序(MergeSort

归并排序首先分解待排序的序列,把1分成2,2分成4,依次分解。当它被分解成只有一个的组时,你可以对这些组进行排序,然后依次合并回原来的序列,这样所有的数据都可以排序。合并排序比堆排序略快,但它需要两倍于堆排序的内存空间,因为它需要一个额外的数组。

3堆排序(堆排序)

堆排序适用于数据量非常大(数百万数据)的情况。

堆排序不需要大量的递归或多维临时数组。这适用于数据量非常大的序列。例如,有超过百万条记录。因为快速排序和归并排序都是用递归来设计算法,所以在数据量非常大的情况下可能会出现堆栈溢出错误。

排序会将所有数据构建成一个堆,最大的数据放在堆的顶部,然后将顶部的数据与序列中最后的数据交换。接下来,再次重建堆,交换数据,依次进行,对所有数据进行排序。

4外壳分类(外壳分类)

Shell排序将数据分成不同的组,先对每个组进行排序,然后将所有元素插入并排序一次,以减少数据交换和移动的次数。平均效率为O(nlogn)。分组的合理性会对算法产生重要影响。现在多用分组法。

外壳排序比冒泡排序快5倍,比插入排序快大约2倍。Shell排序比QuickSort、MergeSort、heap慢很多。但相对简单,适用于数据量在5000以下,速度不是特别重要的情况。对于数据量小的数据序列的重复排序非常好。

5插入排序(插入排序)

插入排序将序列中的值插入到已排序的序列中,直到序列结束。插入排序是冒泡排序的改进。它比冒泡排序倍。一般情况下,当数据大于1000时,没有必要使用insert sort,或者对超过200个数据项的序列进行重复排序。

6冒泡排序(冒泡排序)

冒泡排序是最慢的排序算法。实际上,这是效率最低的算法。它反复比较数组中的每个元素,使较大的数据下沉,较小的数据上升。就是O(n ^ 2)的算法。

7交换排序(ExchangeSort)和选择排序(SelectSort)

两种排序方法都是交换法的排序算法,效率都是O(n2)。在实际应用中,它与冒泡排序处于相同的位置。它们只是排序算法发展的初级阶段,在实践中很少使用。

8基数排序(基数排序)

基数排序与通常的排序算法不同。是比较新颖的算法,但是只能用于整数排序。如果要把同样的方法应用到浮点数上,就必须知道浮点数的存储格式,用特殊的方式把浮点数映射到整数上,然后再映射回来。这是一个很麻烦的事情,所以也用的不多。而且,最重要的是,这个算法还需要更多的存储空间。

排序 算法 数据 序列 冒泡排序

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。