如何在 Java 中對陣列執行堆排序?
以下是堆排序(最大堆)的演算法。
步驟 1 − 在堆的尾部建立一個新節點。
步驟 2 − 給新節點分配新值。
步驟 3 − 將此子節點的值與其父節點進行比較。
步驟 4 − 如果父節點的值小於子節點,則交換它們的位置。
步驟 5 − 重複步驟 3 和 4,直至堆屬性成立。
示例
import java.util.Arrays;
import java.util.Scanner;
public class Heapsort {
public static void heapSort(int[] myArray, int length) {
int temp;
int size = length-1;
for (int i = (length / 2); i >= 0; i--) {
heapify(myArray, i, size);
};
for(int i= size; i>=0; i--) {
temp = myArray[0];
myArray[0] = myArray[size];
myArray[size] = temp;
size--;
heapify(myArray, 0, size);
}
System.out.println(Arrays.toString(myArray));
}
public static void heapify (int [] myArray, int i, int heapSize) {
int a = 2*i;
int b = 2*i+1;
int largestElement;
if (a<= heapSize && myArray[a] > myArray[i]) {
largestElement = a;
} else {
largestElement = i;
}
if (b <= heapSize && myArray[b] > myArray[largestElement]) {
largestElement = b;
}
if (largestElement != i) {
int temp = myArray[i];
myArray[i] = myArray[largestElement];
myArray[largestElement] = temp;
heapify(myArray, largestElement, heapSize);
}
}
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the size of the array :: ");
int size = scanner.nextInt();
System.out.println("Enter the elements of the array :: ");
int[] myArray = new int[size];
for(int i=0; i<size; i++) {
myArray[i] = scanner.nextInt();
}
heapSort(myArray, size);
}
}輸出
Enter the size of the array :: 5 Enter the elements of the array :: 45 125 44 78 1 [1, 44, 45, 78, 125]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP