public class VectorSort {
public static void main(String[] args) {
int[] arr= new int[] { 1,2,3,4,5,6,7,8,9};
for(int value : arr){
System.out.print(value);
}
}
public static void heapSort(int[] data) {
for (int i = 0; i < data.length; i++) {
createMaxdHeap(data, data.length - 1 - i);
exch(data, 0, data.length - 1 - i);
}
}
public static void createMaxdHeap(int[] arr, int lastIndex) {
for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
// 保存当前正在判断的节点
int k = i;
// 若当前节点的子节点存在
while (2 * k + 1 <= lastIndex) {
// biggerIndex总是记录较大节点的值,先赋值为当前判断节点的左子节点
int biggerIndex = 2 * k + 1;
if (biggerIndex < lastIndex) { //判断当前节点是否存在右孩子
// 若右子节点存在,否则此时biggerIndex应该等于 lastIndex
if (arr[biggerIndex] < arr[biggerIndex + 1]) {
// 若右子节点值比左子节点值大,则biggerIndex记录的是右子节点的值
biggerIndex++;
}
}
if (arr[k] <arr[biggerIndex]) {
// 若当前节点值比子节点最大值小,则交换2者得值,交换后将biggerIndex值赋值给k
exch(arr,k, biggerIndex);
k = biggerIndex;
} else {
break;
}
}
}
}
public static void exch(int[] arr, int i, int j) {
if (i == j) {
return;
}
int value = i;
i = j;
j = value;
}
}
public static void main(String[] args) {
int[] arr= new int[] { 1,2,3,4,5,6,7,8,9};
heapSort(arr);
System.out.println("排序后的数组:");
for(int value : arr){
System.out.print(value);
}
}
public static void heapSort(int[] data) {
for (int i = 0; i < data.length; i++) {
createMaxdHeap(data, data.length - 1 - i);
exch(data, 0, data.length - 1 - i);
}
}
public static void createMaxdHeap(int[] arr, int lastIndex) {
for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
// 保存当前正在判断的节点
int k = i;
// 若当前节点的子节点存在
while (2 * k + 1 <= lastIndex) {
// biggerIndex总是记录较大节点的值,先赋值为当前判断节点的左子节点
int biggerIndex = 2 * k + 1;
if (biggerIndex < lastIndex) { //判断当前节点是否存在右孩子
// 若右子节点存在,否则此时biggerIndex应该等于 lastIndex
if (arr[biggerIndex] < arr[biggerIndex + 1]) {
// 若右子节点值比左子节点值大,则biggerIndex记录的是右子节点的值
biggerIndex++;
}
}
if (arr[k] <arr[biggerIndex]) {
// 若当前节点值比子节点最大值小,则交换2者得值,交换后将biggerIndex值赋值给k
exch(arr,k, biggerIndex);
k = biggerIndex;
} else {
break;
}
}
}
}
public static void exch(int[] arr, int i, int j) {
if (i == j) {
return;
}
int value = i;
i = j;
j = value;
}
}