十大排序-堆排序

十大排序-堆排序,第1张

 分为两种:

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();
		
		
	}
	
}

十大排序算法的时间复杂度:

时间复杂度效率对比: 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/2990355.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-09-23
下一篇2022-09-23

发表评论

登录后才能评论

评论列表(0条)

    保存