归并排序:
主要过程:将两个排好序的数组(具体数据结构视实际情况而定)合并成从大到小的数组。
缺点:不是在数组自身存储空间进行操作。
时间复杂度:O(nlgn)
插入排序:
主要过程:当前的关键字与前面的关键字进行比较,插入到合适的地方。
时间复杂度:O(n*n)
冒泡排序:
主要过程:相邻之间的关键字进行大小比对和交换。如果从尾部开始比较交换,则"冒泡"就更加形象了。
时间复杂度:O(n*n)
堆排序:
堆的概念:堆换一种说法是完全二叉树,是一种重要的数据结构。堆可分为最大堆和最小堆。其中优先级队列就用到了堆的概念和技术。
主要过程:父节点大于左右子节点,即父节点的关键字是最大的。根节点和最后的叶节点进行交换,则最后的叶节点的关键字是最大(小)的,然后剔除最后的叶节点,对以根节点(数值变换过)为中心对堆进行重新排序。
复杂度:O(nlgn)
快速排序:
主要过程:在子组中随机选择一个数作为分离该子组的基准,然后将小于该基准值的关键字集中到该基准的左边,大于该基准值的关键字集中到该基准的右边。接下来就是递归调用的问题了。
最差复杂度:O(n*n)(可通过随机化输入分布来避免)
平均复杂度:O(nlgn)(系数较小,所以该算法在排序中使用率较高)