Java实现堆排序(大根堆) 堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(最小)的元素。 1. 若array[0,...,n-1]表示一 ...
分类:
编程语言 时间:
2018-03-25 11:58:00
阅读次数:
191
今天突然想到了一个问题: 让你立即把堆排、快排等等排序算法写出来会不会,并且不能犯逻辑错误? 我说:不会,至少需要思考一下,并且可能还需要时间调试。 之前总是觉得,不就是排序算法吗?有什么大不了的?网上、书上一查一大堆。但是换个角度想:1+1 = ? 你会不会? 排序算法应是作为最基本的工具一样,是 ...
分类:
编程语言 时间:
2018-03-24 19:32:27
阅读次数:
202
知识目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速排序 五、堆排序 六、归并排序 总结 一、冒泡排序 1、思路:首先,列表每两个相邻的数比较大小,如果前边的比后边的大,那么这两个数就互换位置。就像是冒泡一样 2、代码关键点: 趟数:n-1趟 无序区 3、图示说明:依次类推就会得到排序结果。 ...
分类:
编程语言 时间:
2018-03-24 16:29:53
阅读次数:
205
import java.util.Arrays; public class HeapSort { //数组arr下标为0的位置不使用,待排序数字放入下标为 1 ~ arr.length-1 的位置,并对这些位置上的元素排序 public static void sort(int arr[]) { H ...
分类:
编程语言 时间:
2018-03-22 21:24:02
阅读次数:
232
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 ...
分类:
编程语言 时间:
2018-03-21 11:49:06
阅读次数:
176
堆这种数据结构的一种典型应用——优先队列(Priority Queue) 普通队列:先进先出;后进后出。 优先队列:出队顺序和入队顺序无关;和优先级相关。 优先队列最典型的应用就是在计算机的操作系统中执行任务,当操作系统执行多个任务时,操作系统是将cpu的执行周期划成了多个时间片,在每个时间片里只能 ...
分类:
编程语言 时间:
2018-03-14 15:54:50
阅读次数:
238
选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。[1] 简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序 ...
分类:
编程语言 时间:
2018-03-11 11:50:59
阅读次数:
247
八大常用排序算法详细分析 包括复杂度: 排序有可以分为以下几类: (1)、交换排序:冒泡排序、快速排序 (2)、选择排序:直接选择排序、堆排序 (3)、插入排序:直接插入排序、希尔排序 (4)、归并排序 (5)、基数排序(桶排序) 1.冒泡排序 顾名思义,冒泡排序就是用气泡从下往上冒的原理,将气泡( ...
分类:
编程语言 时间:
2018-03-11 00:10:14
阅读次数:
185
完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率同样极高。目前十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化。 堆排序是一种选择排序算法,与原序列的初始排列次序无关,即最好、最坏和一般情况排序的时间复杂度不变,均为O(nlgn)。而且,堆排序只 ...
分类:
编程语言 时间:
2018-03-10 21:55:42
阅读次数:
136
堆排序是选择排序中一种很重要的一种排序方法 选择排序是在未排序的元素中筛选出最大关键字元素放入已排序序列末尾,选择其实就是查询,最直接无脑的查询方式就是遍历全部未排序的元素查找出最大关键字,查询一次的时间复杂度也就为O(n),而借助一些数据结构则可以在O(logn)的时间内查询出最大关键字,比如二叉 ...
分类:
编程语言 时间:
2018-03-10 16:02:04
阅读次数:
187