algorithm

排序

冒泡排序: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 时间复杂度: O(n^2),空间复杂度:O(1),算法稳定。
选择排序: 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。时间复杂度:O(n^2),空间复杂度:O(1),算法不稳定。
插入排序: 把待排序的数组分成已排序和未排序两部分,初始把第一个元素认为是已排好序的。从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置。时间复杂度:O(n^2),空间复杂度:O(1),算法稳定。
快速排序: 通过选定一个基准值,依据这个基准值分为左右两部分,也就是小于和大于基准值的两部分,然后通过递归调用再次去排序小于和大于的部分,最后得到排序后的数组。 时间复杂度:O(nlogn),空间复杂度:O(nlogn),算法不稳定。
归并排序: 通过递归调用,将未排序的数组进行拆分成单个元素,然后再合并的过程中保证合并前后的数组进行有序的即可。时间复杂度:O(nlogn),空间复杂度:O(n),算法稳定。
堆排序: 堆(树的形式存储)排序就是把最大堆堆顶的最大数取出,将剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束。时间复杂度:O(nlogn),空间复杂度:O(1),算法不稳定。