排序算法(上)
本文讨论关于数组排序算法的实现, 给定一个整形数组,按从小到大排列
常见的排序算法有:插入排序, 选择排序,冒泡排序,快速排序,归并排序等
插入排序
两种实现方案,第一种方法是新建一个数组并按序排列,遍历原始数组复制元素到新的数组, 时间复杂度为 O(n * n), 空间复杂度为O(n), 同时为不稳定的排序; 另一种方式是在原地选择和排序,数组分为两部分,左边是已排序的部分,右边是带排序的部分,初始状态左侧为数组第一个元素,右侧为第二个元素之后的元素,从数组中第二个元素开始遍历, 依次插入左侧并排序, 时间复杂度为 O(n * n), 稳定排序
1 | package sort |
选择排序
遍历数组, 每次取剩下的元素中的最小的元素的下标, 如果找到了就和已排序的元素进行交换, 时间复杂度 O(n * n)
1 | package sort |
冒泡排序
比较相邻的数字,将大数字后移, 遍历完一轮右侧是最大的数字,然后在比较第0个元素到第n-1个元素,直到n=1, 时间复杂度: O(n * n)
1 | package sort |
归并排序
将数据分成相等两部分(length / 2 = mid), 分别对start到mid和mid到end进行排序, 然后在进行合并, 知道start>=end结束遍历, 时间复杂度O(logN), 空间复杂度O(N)
1 | package sort |