background image

integers[minIndex] = temp;

}

}

}

}

4. 堆排序

堆排序的思想就是将要排序的数组看成一个完全二叉树(出最后一层节点外,其他
节点都是 2 个子节点),之后建立大顶堆,将完全二叉树建立成一个父节点值都大
于它的子节点的树。之后将根节点和要排序的数组的最后一个元素进行换位。之后除
了数组最后一个元素外重复建堆过程。算法如下

package

 sort;

import

 java.util.Arrays;

/**
 * 堆排序
 * 
 * 

@author

 liuyan

 */

public

 

class

 HeapSort {

/**
 * 构建堆数组
 * 
 * 

@param

 datas

 * 

@param

 lastIndex

 */

public

 

static

 

void

 buildHeap(Integer[] datas, 

int

 lastIndex) {

//从目标的父节点开始遍历

for

 (

int

 i = (lastIndex - 1) / 2; i >= 0; i--) {

//记录父节点位置

int

 maxIndex = i;

//当父节点的子节点存在的时候

while

 (maxIndex * 2 + 1 <= lastIndex) {

//默认附一个大值为父节点的左子节点的索引

int

 biggerIndex = maxIndex * 2 + 1;

//此处判断是否父节点还有一个右子节点

if

 (biggerIndex < lastIndex) {

 

2

 / 

11