HeapImpl

xiaoxiao2026-05-23  19

package com.liuxt.sort.impl;

import com.liuxt.sort.Sort;

 

public class HeapImpl implements Sort {

  /**  * 用堆排序算法实现对数组的递增排序。  * 基本思想:  *   先按对的定义排列成一个序列输出堆的最小关键字(对小顶堆而言),然后将剩余的关键字最调整为新堆。  *   得到次小的关键字,反复知道所有的关键字都有序。  *    *  时间复杂度o(nlogn)  *  空间复杂度  * @param data  */  public void sortData(int[] data) {   int i=0,t=0;   int n=data.length;   for(i=n/2-1;i>=0;--i)    heapadjust(data,i,n-1);   for(i=n-1;i>0;--i){    t=data[0];    data[0]=data[i];    data[i]=t;    heapadjust(data,0,i-1);   }    }

 /**  * 将一个整数数组中的元素调整成大根堆  * @param data  * @param s  * @param m  */ private void heapadjust(int[] data, int s, int m) {  /**data[s..m]所构成的一个元素序列中,除了data[s]外,其余元素均满足堆的定义**/  /**调整元素data[s]的位置,使data[s..m]成为一个大根堆**/  int t,j;  t=data[s];// 备份元素data[s],为以后找到适合的位置后插入  for(j=2*s+1;j<m;j=j*2+1){ //沿着值较大的孩子节点向下筛选。   if(j<m&&data[j]<data[j+1]) ++j; //j是值较大的元素的索引下标   if(!(t<data[j])) break; //用s记录待插入元素的下标。   data[s]=data[j];s=j; //插入备份元素。  }//end for  data[s]=t; }

}

相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5049235.html

最新回复(0)