返回

C++代码实现了冒泡、选择、希尔、快速排序算法,并且进行了效率比较

闲谈

概述

排序是将一组数据重新排列,使得数据按照一定顺序排列。排序算法有很多种,每种算法都有其优缺点。本文将通过C++语言实现冒泡、选择、希尔和快速四种排序算法,并比较它们的运行效率。

冒泡排序

冒泡排序是一种简单的排序算法。它的基本思想是将最大的元素逐个移到数组的末尾。首先,从头到尾遍历数组,比较相邻的两个元素,如果前面的元素大于后面的元素,则交换这两个元素的位置。然后,再次从头到尾遍历数组,重复上述过程。如此反复,直到数组完全有序。

冒泡排序的平均时间复杂度为O(n^2),最坏时间复杂度也为O(n^2)。它的空间复杂度为O(1),因为它只需要常数级别的额外空间。

选择排序

选择排序也是一种简单的排序算法。它的基本思想是将最小的元素逐个移到数组的开头。首先,从头到尾遍历数组,找出最小的元素,然后将它与数组的第一个元素交换位置。然后,再次从头到尾遍历数组,重复上述过程。如此反复,直到数组完全有序。

选择排序的平均时间复杂度为O(n^2),最坏时间复杂度也为O(n^2)。它的空间复杂度为O(1),因为它只需要常数级别的额外空间。

希尔排序

希尔排序是一种改进的插入排序算法。它的基本思想是将数组分成若干个子数组,然后对每个子数组进行插入排序。首先,将数组分成若干个子数组,每个子数组的长度为h。然后,对每个子数组进行插入排序。然后,将h的值减半,并重复上述过程。如此反复,直到h的值为1。

希尔排序的平均时间复杂度为O(nlogn),最坏时间复杂度为O(n^2)。它的空间复杂度为O(1),因为它只需要常数级别的额外空间。

快速排序

快速排序是一种高效的排序算法。它的基本思想是将数组分成两部分,然后分别对这两部分进行快速排序。首先,选择数组中的一个元素作为枢轴元素。然后,将数组分成两部分,一部分包含比枢轴元素小的元素,另一部分包含比枢轴元素大的元素。然后,分别对这两部分进行快速排序。如此反复,直到数组完全有序。

快速排序的平均时间复杂度为O(nlogn),最坏时间复杂度为O(n^2)。它的空间复杂度为O(logn),因为它需要递归调用函数,而每次递归调用都会占用栈空间。

实验结果

为了比较四种排序算法的运行效率,我们对一个包含10万个随机数的数组进行了排序。实验结果如下:

算法 平均时间复杂度 最坏时间复杂度 空间复杂度
冒泡排序 O(n^2) O(n^2) O(1)
选择排序 O(n^2) O(n^2) O(1)
希尔排序 O(nlogn) O(n^2) O(1)
快速排序 O(nlogn) O(n^2) O(logn)

结论

从实验结果可以看出,快速排序的运行效率最高,其次是希尔排序,然后是冒泡排序和选择排序。快速排序的平均时间复杂度和最坏时间复杂度都是O(nlogn),而冒泡排序和选择排序的平均时间复杂度和最坏时间复杂度都是O(n^2)。希尔排序的平均时间复杂度为O(nlogn),最坏时间复杂度为O(n^2)。