堆排序

java实现:

public class 堆排序 {

	public static void main(String[] args) {
		int A[] = {0,13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
		heap_Sort(A);
		for (int i = 1; i < A.length; i++) {
			System.out.print(A[i] + " ");
		}
		
	}
	
//	public static void swap(int a, int b) {
//		int temp = a; 
//		a = b; 
//		b = temp ;
//	}
//	
	public static int parent(int i) {
		return i/2;
	}
	
	public static int left_child(int i) {
		return i * 2;
	}
	
	public static int right_child(int i) {
		return 2*i + 1;
	}
	
	public static void Max_Heapify(int A[], int i, int Heap_size) {
		int l = left_child(i);
		int r = right_child(i);
		int largest ;
		if (l <= Heap_size && A[l] > A[i]) {
			largest = l;
		}
		else {
			largest = i ;
		}
		if (r <= Heap_size && A[r] > A[largest]) {
			largest = r;
		}
		
		if (largest != i) {
//			swap(A[i], A[largest]);
			int temp = A[i];
			A[i] = A[largest];
			A[largest] = temp;
			Max_Heapify(A, largest, Heap_size);
		}
	}
	
	public static void Build_Max_Heap(int A[]) {
		int heap_size = A.length - 1;
		for (int i = A.length/2; i >= 1 ; i--) {
			Max_Heapify(A, i, heap_size);
		}
	}
	
	public static void heap_Sort(int A[]) {
		Build_Max_Heap(A);
		
		int HeapSize = A.length - 1;
		for (int i = A.length - 1; i >= 2 ; i--) {
//			swap(A[i], A[1]);
			int temp = A[i];
			A[i] = A[1];
			A[1] = temp;
			HeapSize --;
			Max_Heapify(A, 1, HeapSize);
		}
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值