参考博客:堆的相关知识
在大顶堆中添加数据。
- 将要添加数据Insert_data追加到数组末尾。
- 比较Insert_data与其父节点的大小。
2.1 若是父节点的值大于Insert_data,则该处就是该数据要插入的位置。
2.2 若是父节点的值小于Insert_data,交换两个值,并向上寻找其父节点再进行比较,直到与根节点。
代码实现:
import java.util.Arrays;
import java.util.Scanner;
public class HeapDataInsert {
public static void main(String[] args) {
int [] arr = {90,80,70,60,40,30,20,10,50};
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
//将数据插入到新数组末尾当中。
int [] new_arr = new int[arr.length+1];
for (int i = 0; i < new_arr.length; i++) {
if(i == new_arr.length-1){
new_arr[i] = number;
break;
}
new_arr[i] = arr[i];
}
HeapInsert(new_arr);
System.out.println(Arrays.toString(new_arr));
}
public static void HeapInsert(int [] new_arr){
int start_index = new_arr.length-1;
int parent_index = (start_index-1)/2;
while(start_index > 0){
if(new_arr[parent_index]>new_arr[start_index]){
break;
}else{
int temp = new_arr[start_index];
new_arr[start_index] = new_arr[parent_index];
new_arr[parent_index] = temp;
start_index = parent_index;
parent_index = (start_index-1)/2;
}
}
}
}
输入:
85
输出结果:
[90, 85, 70, 60, 80, 30, 20, 10, 50, 40]