完全二叉树:数据从上到下,从左到右依次平铺
堆:大顶堆和小顶堆;
大顶堆: 在完全二叉树的基础上,每个节点的值都大于或者等于其左右孩子的节点的值。
小顶堆: 在完全二叉树的基础上,每个节点的值都小于或者等于其左右孩子的节点的值。
1.构建大顶堆; 2.对顶元素和堆底元素互换;互换完成以后,该元素不在参与排序3.重新构建大顶堆。
package com.qcby;
import java.util.Arrays;
public class Merge2 {
public static void main(String[] args) {
int[] arr = new int[] {2,45,32,5,465,76,3,6,45,78,59,0};
merge(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void merge(int arr[],int left,int right) {
if(left == right) {
return;
}
int mid = (left + right) /2;
merge(arr,left,mid);
merge(arr,mid+1,right);
he(arr,left,mid,right);
}
public static void he(int[] arr,int left,int mid,int right) {
int s1 = left;
int s2 = mid+1;
int index = 0;
int temp[] = new int[right-left+1];
while(s1<=mid&&s2<=right) {
if(arr[s1]<=arr[s2]) {
temp[index] = arr[s1];
s1++;
index++;
}
else {
temp[index] = arr[s2];
s2++;
index++;
}
}
while(s1<=mid) {
temp[index] = arr[s1];
index++;
s1++;
}
while(s2<=right) {
temp[index] = arr[s2];
s2++;
}
for(int i = 0;i<temp.length;i++) {
arr[i+left] = temp[i];
}
}
}