快速排序:
快速排序使用,分治法+双指针的思想,一般设置基准值为第一个数,通过搜寻左边大于基准值的数与右边小于基准值的数进行交换。
快速排序的平均时间复杂度为O(nlogn),为改进的快排最坏复杂度为,即退化为冒泡排序。改进使用三个指针,选取最中间的值作为基准值,可以保证快排还原为O(nlogn)
堆排序:
当要求升序排列时,构建大顶堆。每次获得堆顶元素,与未排序数组的最后一位进行交换,再再一次调整大顶堆。
调整:找到第一个非叶结点,将其值存储到tmp中,查看是否小于孩子结点,如果是,则孩子结点的值赋给它,同时parent结点变为child结点,如果child结点index大于数组长度,则退出。同时将tmp赋值到当前结点。
基数排序:
由最低权重基数开始排,分发类型而不是排序,然后下一次分发由这一次获得的链表重组起来,再一次分发。直到到达最大权重的基数。
网友评论