
分为两种:
1、小顶堆-逆向排序
2、大顶堆-顺向排序
package com.xch2.DiGui;
import java.util.*;
public class Main7 {
//堆排序(小顶堆=逆序,大顶堆=顺序)
//建小顶堆
static void f1(int[] arr,int index,int leng) {//index初始为数组二分值减一
if(index<0) //leng 初始为数组长度
return;
int left=2*index+1,right=2*index+2,mid;
if(left==leng-1) {//最后一个父节点为单亲节点
if(arr[left]arr[index]) {
mid=arr[left];
arr[left]=arr[index];
arr[index]=mid;
}
}else {
if(arr[left]>=arr[right]&&arr[left]>arr[index]) {
mid=arr[left];
arr[left]=arr[index];
arr[index]=mid;
}else if(arr[right]>=arr[left]&&arr[right]>arr[index]) {
mid=arr[right];
arr[right]=arr[index];
arr[index]=mid;
}
}
f3(arr,index-1,leng);
}
//大顶堆转顺序数组
static void f4(int arr[],int leng) {
if(leng==1)
return;
f3(arr,leng/2-1,leng);
int mid=arr[leng-1];
arr[leng-1]=arr[0];
arr[0]=mid;
leng--;
f4(arr,leng);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int arr[]= {5,2,8,9,2,6,7,10};
// f1(arr,arr.length/2-1,8);
f2(arr,8);
// f3(arr,arr.length/2-1,8);
// f4(arr,8);
for (int i : arr) {
System.out.print(i+" ");
}
System.out.println();
}
}
十大排序算法的时间复杂度:
时间复杂度效率对比:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)