摘要: 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路一:堆排序,小根堆,每次找到取出最小的根 代码一: 1 void Heap(vector<int> &arr,int len,int Root) 2 { 3 in 阅读全文
posted @ 2018-05-31 16:38 Lune-Qiu 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 堆的本质上其实就是一个数组。 分为大根堆和小根堆 大根堆:父亲的值 > 孩子; 小根堆:父亲的值 < 孩子; 堆排序:与选择排序类似,也是选择最大的放在最后的位置。 优点:比选择排序快,因为在当第一次排好大根堆后,把根与最后一个值交换。这是树中只需要调整根,也就是在左孩子和右孩子中选择一个大的与之交 阅读全文
posted @ 2018-05-31 15:30 Lune-Qiu 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 归并排序思路:就是将数组拆成一个个有序的数组,然后再合并有序数组的过程。 最开始数组中有序数组怎么找到? 像插入排序一样,将一个元素看成一个有序的数组,所以,归并就是先将数组分为一个个的元素,再合并起来。 举个例子:4 7 3 2 5 6 1 先递归到最深处 4 7 调用函数Sort将这两个数组合并 阅读全文
posted @ 2018-05-31 13:11 Lune-Qiu 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 希尔排序主要使用插入排序的思想。 插入排序更适用于元素少的情况。所以希尔排序的主要方法就是讲数组分为一个一个更小的组,然后将每个小组用插入排序的方式排序。 分组方式:现将步长设为数组长度的一半,然后每次分组减少一步。 代码: 阅读全文
posted @ 2018-05-31 12:25 Lune-Qiu 阅读(150) 评论(0) 推荐(0) 编辑