常见的排序算法有以下几种:
- 冒泡排序:比较相邻的元素,将较大的元素往后移,最终把最大的元素放在了数组的末尾,重复执行直到整个数组有序。
- 选择排序:在未排序的部分中找到最小的元素,将其放到已排序部分的末尾,重复执行直到整个数组有序。
- 插入排序:将未排序部分的第一个元素插入到已排序部分的合适位置,重复执行直到整个数组有序。
- 快速排序:选取一个基准元素,将比它小的元素放在其左侧,比它大的元素放在其右侧,再分别对左右两部分进行快排。
- 归并排序:将待排序数组分成若干个子数组,分别对每个子数组进行排序,最后合并所有子数组得到排序结果。
堆排序是一种基于堆的排序算法。堆是一种特殊的数据结构,它是一个完全二叉树,并且满足堆的性质:任意节点的值都大于等于(或小于等于)其子节点的值。堆排序的思想是先将待排序数组转换成堆,然后依次从堆中取出最大(或最小)的元素,将其放到数组的末尾,重复执行直到整个数组有序。具体实现步骤如下:
- 将待排序数组构造成一个大根堆。
- 将堆顶元素(最大元素)取出,将其与堆底元素交换,并缩小堆的范围。
- 对新的堆进行调整,使其重新满足堆的性质。
- 重复执行步骤2和步骤3,直到堆的大小为1。
堆排序的时间复杂度为O(nlogn),是一种高效的排序算法。