package dataTest;
public class test {
public static void main(String[] args) {
int[] arr = {2, 3, 4, 5, 69, 83, 2, 32};
heapsort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
//堆排序
public static void heapsort(int []arr) {
for (int p=arr.length-1;p>=0;p--) {
adjust(arr,p,arr.length);
}
//堆底堆顶进行交换
for (int i=arr.length-1;i>=0;i--) {
int t=arr[i];
arr[i]=arr[0];
arr[0]=t;
adjust(arr,0,i);
}
}
public static void adjust(int []arr,int parent,int length) {
//定义左孩子
int child=2*parent+1;
while(child<length) {
//定义右孩子
int rchild=child+1;
//如果有右孩子且数值合法
if (rchild<length &&arr[child]<arr[rchild]) {
child++;
}
//如果父节点小于左孩子节点节点值进行交换且该节点成为父节点,
if (arr[parent]<arr[child]) {
int t=arr[child];
arr[child]=arr[parent];
arr[parent]=t;
parent=child;
child=2*child+1;
}else {
break;
}
}
}
}
八大排序之堆排序
最新推荐文章于 2025-08-04 18:56:57 发布