文章目录
- 排序
- 一、 排序的概念
- 1.排序:
- 2.稳定性:
- 3.内部排序:
- 4.外部排序:
- 二、插入排序
- 1.直接插入排序
- 二、插入排序
- 堆排序
排序
一、 排序的概念
1.排序:
- 一组数据按递增/递减排序
2.稳定性:
- 待排序的序列中,存在多个相同的关键字,拍完序后,相对次序保持不变,就是稳定的
3.内部排序:
- 数据元素全部放在内存中的排序
4.外部排序:
- 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序
二、插入排序
1.直接插入排序
二、插入排序
堆排序
- 时间复杂度: O( N * log N)
- 空间复杂的:O (1)
-
升序:建大堆
-
降序:建小堆
将一组数据从小到大排序 ——> 建立大根堆
为什么不用小根堆:小根堆只能保证,根比左右小,不能保证左右孩子的大小顺序,并且要求对数组本身进行排序
- 大根堆,保证堆顶元素是最大值,最大值跟最后一个元素交换,将最大的放在最后,usedSize–;
- 向下调整:调整0下标的树,维护大根堆,最大值继续交换到最后一个有效元素的位置
- 从后往前,从大到小依次排列,保证在原来数组本身进行排序
/**
* 堆排序
* 时间复杂度: N*logN
* 空间复杂的:o(1)
*/
public void heapSort() {
int end = usedSize - 1;//最后一个有效元素
while (end > 0) {//直到end等于0
swap(elem, 0, end);//交换end位置和堆顶位置元素
shiftDown(0, end);//向下调整
end--;
}
}
- 时间复杂度: O( N * log N)
- 空间复杂的:O (1)
身体不适,未完待续
点击移步博客主页,欢迎光临~