排序思路
冒泡排序的思路如下:
- 比较相邻的元素。假如第一个比第二个大,就交流它们的方位。
- 对每一对相邻的元素做相同的工作,从开端的第一对到结尾的最终一对。这步完结后,最终的元素应该是数组中最大的数。
- 针对所有的元素重复以上的过程,除了最终一个。
- 持续每次对越来越少的元素重复上述过程,直到没有任何一对数字需求比对。
冒泡排序是一种简略但功率比较低的排序算法,时刻复杂度为 O(n),在处理数据规划较小的数据时,其体现比较超卓。但是,在实践开发中,根据功率的考虑,更多地选用其他算法进行排序。
插入排序的思路如下:
- 从第一个元素开端,该元素能够认为现已被排序。
- 取出下一个元素,在现已排序的元素序列中从后向前扫描。
- 假如该元素(已排序)大于新元素,将该元素移到下一方位。
- 重复过程 3,直到找到已排序的元素小于或者等于新元素的方位。
- 将新元素插入到该方位后。
- 重复过程 2~5,直到排序完结。
插入排序相比较冒泡排序、挑选排序时刻复杂度有些高,但空间复杂度低,且对于根本有序数组,体现优异。在实践开发中,也的确由于其完成简略、适用性强而得到广泛使用。
挑选排序的思路如下:
- 初始状况:无序区为整个数列,有序区为空。
- 在无序区中遍历,找到最小的元素,然后将其放到有序区的结尾。
- 重复过程 2,直到整个数列排序完结。
挑选排序的时刻复杂度为O(n),相对于其他排序算法而言功率较低,在处理大规划数据时体现较差,但其完成简略、代码易于了解,在实践开发中广泛使用。
归并排序的思路如下:
- 切割阶段:
将待排序的数列分成两部分,递归地对左右两部分进行归并排序。 - 归并阶段:
将两个现已排序好的子序列合并成一个最终的排序序列。
归并排序的时刻复杂度为O(n*logn),相比较冒泡排序、挑选排序、插入排序时刻复杂度有了较大的提升,在大规划数据上体现较为超卓,在实践开发中使用状况较多。
快速排序的思路如下:
- 挑选一个基准元素:
从数列中选取一个元素作为基准元素(一般挑选第一个元素或最终一个元素)。 - 切割操作:
将数列中所有小于基准元素的元素放到左边,所有大于基准元素的元素放到右边,等于基准元素的元素放到中间。 - 递归排序:
对左右两个分区重复过程1和过程2,直到各区间只要一个数停止。
快速排序相比较冒泡排序和挑选排序具有时刻复杂度低、旧址性高的长处,在大规划数据上体现比较超卓,但在实践开发中需求注意,快速排序的时刻复杂度也存在必定的极值状况。
堆排序的思路如下:
- 建立最大堆:
将待排序数组转化为最大堆。最大堆是一种特别的二叉树,即每个节点都大于等于其左右儿子节点,而且是一颗彻底二叉树。 - 将堆顶元素取出并放入已排序区间结尾:将堆顶元素(即最大值)取出并放入已排序区间的结尾。
- 调整堆:将剩下的元素从头调整为最大堆。重复过程2和过程3,直到所有元素都现已排序结束。
堆排序算法对原始数据在堆上进行排序,相比较其他排序算法具有时刻复杂度低、适应性强、稳定性低的长处,在实践开发中,使用状况较多。