HeapSort
2007-09-01 16:37
337 查看
class Test
...{//堆采用顺序表(一维数组)存储表示
public static void main(String[] args)
...{
int a[]=...{0,49,38,65,97,76,13,27,49};
HeapSort(a);
for(int i=1;i<a.length;i++)
System.out.print(a[i]+" ");
}
public static void HeapAdjust(int a[],int s,int m)
...{//已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义,本函数调整H.r[s]
//的关键字,H.r[s..m]成为一个大顶堆
int rc=a[s];
int j;
for(j=2*s;j<m;j*=2)...{//沿key较大的孩子结点向下筛选
if(j<m&&max(a[j],a[j+1]))++j;//j为key较大的记录的下标
if(!max(rc,a[j]))break; //rc应插入在位置s上
a[s]=a[j];s=j;
}
a[s]=rc; //插入
}
public static void HeapSort(int a[])
...{
//对顺序表H进行堆排序
int i;
for(i=a.length/2;i>=1;--i) //把H.r[1..H.length]建成大顶堆
HeapAdjust(a,i,a.length-1);
for(i=a.length-1;i>=1;--i)
...{
int tmp=a[1]; //将堆顶记录和当前未经排序子序列Hr[1..i]中
a[1]=a[i]; //最后一个记录相互交换
a[i]=tmp;
HeapAdjust(a,1,i-1); //将H.r[1..i-1]重新调整为大顶堆
}
}
public static boolean max(int a,int b)
...{
return a>b;
}
}
相关文章推荐
- 选择排序—堆排序(Heap Sort)
- Algorithms:HeapSort
- 1098. Insertion or Heap Sort
- 堆排序(Heap Sort)
- 堆排序(HeapSort)
- Sorting Algorithm-Heap Sort
- 排序——堆排序(HeapSort)
- heap——sort
- 八大排序算法之四选择排序—堆排序(Heap Sort)
- heapsort堆排序(3种语言实现 c/java/python)
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- 堆积排序-堆排序-heap sort
- Heapsort 6.1-1
- 1098. Insertion or Heap Sort (25)
- C++中堆(优先队列)的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
- 选择排序—堆排序(Heap Sort)
- 我的C算法库【4】:HEAP_SORT
- Introduction to Algorithm - Summary of Chapter 6 - Heapsort
- 1098. Insertion or Heap Sort (25)