首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

小顶堆应用(数组模拟)

2012-08-31 
小顶堆使用(数组模拟)查找一个数组中最大的十个数据。首先我写了一个快速排序的方法:public class quickSor

小顶堆使用(数组模拟)
查找一个数组中最大的十个数据。
首先我写了一个快速排序的方法:
public class quickSort {
  /**
   * 以第一个数据为标准,小的放在右边,大的放在左边
   * @param t 要排序的数据,默认从小到大排
   * @param left 数据的下界
   * @param right 数据的上届
   */
  public static void QuickSort(int t[],int left,int right){
  int i=left,j=right;
  if(i>=j) return;//若有变的下标不小于左边,结束返回。
  int temp=t[i];
  while(i<j){
while(i<j&&t[j]>=temp) j--;//找到左边比第一个数据要小的数据
if(i<j) t[i]=t[j];//将其赋值给相应的右边数据
while(i<j&&t[i]<=temp) i++;//找左边比第一个数据要大的
if(i<j) t[j]=t[i];//将数据赋给右边
  }
  t[i]=temp;
  QuickSort( t,left,i-1);//递归
  QuickSort( t,i+1,right);
 
 
  }
}
然后写了另一个利用小顶堆来找最大的的是个数据的方法
import java.util.Random;
import java.util.Scanner;

public class search {


public static void main(String[] args){
Random ran=new Random();
int t[]=new int[11];
int a[]=new int[101];
for(int i=1;i<101;i++){
a[i]=ran.nextInt(1000);
}
for(int i=1;i<11;i++){
t[i]=a[i];
}
quickSort.QuickSort(t,1,10);
  for(int j=11;j<101;j++){
if(t[1]<a[j]){
t[1]=a[j];
priority(t,1);
}
}
for(int i=1;i<11;i++){
    System.out.print(t[i]+" ");
    }
/*System.out.println("");
for(int i=1;i<101;i++){
    System.out.print(a[i]+" ");
    }*/


}
  /**
   * 安小顶堆的方式递归数组得到最小的数
   * @param t 数组
   * @param q 数组下标
   */
  public static void priority(int t[],int q){
  if(q>=6)return;
  int k,p,g,i,j;
  if(q<5){
      k=q;
      p=2*q;
      g=0;
      i=t[k]-t[p];
      j=t[k]-t[p+1];
  if(i<=0&&j<=0) return;
 
  if(i>0||j>0){
 
   if(i>0&&j<0){
  t[k]=t[k]+t[p];
  t[p]=t[k]-t[p];
  t[k]=t[k]-t[p];
g=p;
}
if(j>0&&i<0){
t[k]=t[k]+t[p+1];
t[p+1]=t[k]-t[p+1];
t[k]=t[k]-t[p+1];
   g=p+1;
}
if(i>0&&j>0){
if(i>j){
t[k]=t[k]+t[p];
    t[p]=t[k]-t[p];
t[k]=t[k]-t[p];
g=p;
}
   if(i<=j){
t[k]=t[k]+t[p+1];
t[p+1]=t[k]-t[p+1];
t[k]=t[k]-t[p+1];
g=p+1;
}
}
}
priority(t,g);
  }else{
  k=q;
      p=2*q;
      if(t[k]>t[p]){
    t[k]=t[k]+t[p];
t[p]=t[k]-t[p];
t[k]=t[k]-t[p];
return;
      }else{
      return;
      }
  }
 
 
 

 
  }

}

热点排行