八大排序之堆排序

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




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值