C++代码实现了冒泡、选择、希尔、快速排序算法,并且进行了效率比较
2024-01-06 23:14:10
概述
排序是将一组数据重新排列,使得数据按照一定顺序排列。排序算法有很多种,每种算法都有其优缺点。本文将通过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)。