Kotlin练习-堆排序
2017-06-03 17:49
183 查看
Java版本
object HeapSort { /** * 创建最大堆结构,要求是任何非叶子节点都比它的左右两个节点都要大 */ fun createHeap(array: MutableList<Int>, i: Int) { if (array.size == 1) return //首先堆的重要特性是非叶子节点数少于size/2,所以我们只需要调整前size/2索引上的值 val leftChildIndex = 2 * i + 1 val rightChildIndex = 2 * i + 2 var max = i if (i <= array.size / 2) { //如果左子节点比当前大,那么调换位置 if (leftChildIndex < array.size && array[leftChildIndex] > array[i]) { max = leftChildIndex } //如果右子节点比当前大,那么调换位置 if (rightChildIndex < array.size && array[rightChildIndex] > array[i]) { max = rightChildIndex } if (max != i) { //调换位置 swap(array, i, max) createHeap(array, i) } } } private fun swap(array: MutableList<Int>, i: Int, max: Int) { val temp = array[i] array[i] = array[max] array[max] = temp } fun buildHeap(array: MutableList<Int>) { var i = array.size / 2 while (i >= 0) { createHeap(array, i) i-- } } /** * 堆排序 */ fun sort(array: MutableList<Int>) { var size = array.size while (size > 0) { buildHeap(array) print("${array[0]} ") //获取一次最大堆后删除后,重新生成新堆 array.removeAt(0) size-- } } }
相关文章推荐
- C++编程练习(13)----“排序算法 之 堆排序“
- 909422229_kotlin第二节:练习代码分享
- kotlin在主程序中提交数据到fragment中并显示的简单练习
- 《算法导论》第六章----堆排序练习(证明)(完整版)
- 编程练习:堆排序
- kotlin练习
- C++编程练习(13)----“排序算法 之 堆排序“
- 排序练习【sdut 1582】【堆排序】
- 简单的kotlin练习(ing)
- Scala练习-堆排序
- Kotlin的简单使用练习
- 排序(快速排序和堆排序)练习
- 堆练习——堆排序
- 数据结构练习——堆排序
- [算法练习]堆排序的C语言实现
- 【作业存档】堆排序和插入排序的练习
- Kotlin项目练习记录 续
- php堆排序(heapsort)练习
- 【数据结构练习】排序——堆排序和快排
- kotlin 练习