数据结构与算法(12)---Java语言实现:堆排序(续)
2017-12-31 10:00
295 查看
换一种更清晰的写法:
package 算法;
//堆排序
//三个核心方法:构建大顶堆;调整堆;交换数据
public class Demo8{
// 交换数据
public static void change(int[] arr,int a,int b){
int temp1=arr[a];
arr[a]=arr[b];
arr[b]=temp1;
}
//调整堆
public static void adjustHeap1(int[] arr,int start,int end){
//三个参数:调整数列,调整首位置,调整尾位置
int child;//子节点
int temp2=arr[start];
for(child=start*2+1;child<end;child=child*2+1){
if(child<end-1 && arr[child]<arr[child+1]){
child=child+1;
}
if(temp2>=arr[child]){
break;
}
arr[start]=arr[child];
start=child;
}
arr[start]=temp2;
}
//构建大顶堆
public static int[] buildHeap1(int[] arr){
int len=arr.length;
for(int i=len/2;i>=0;i--){
adjustHeap1(arr, i, len);
}
return arr;
}
//堆排序
public static void sortHeap1(int[] arr){
arr=buildHeap1(arr);
for(int le=arr.length-1;le>0;le--){
change(arr, 0, le);
adjustHeap1(arr, 0, le);
}
}
//测试方法:
public static void main(String[] args){//测试方法
int arr[]={7,4,8,3,5,2,1,6,10,27,12,23};
// System.out.println(arr);
arr=buildHeap1(arr);
System.out.print(" 构建的大顶堆是:");
for(int i=0;i<arr.length;i++){//逐项输出
System.out.print(arr[i]+" ");
}
sortHeap1(arr);
System.out.print(" 堆排序结果:");
for(int i=0;i<arr.length;i++){//逐项输出
System.out.print(arr[i]+" ");
}
}
}
程序运行结果:
构建的大顶堆是:27 12 23 10 7 8 1 6 3 5 4 2 堆排序结果:1 2 3 4 5 6 7 8 10 12 23 27
package 算法;
//堆排序
//三个核心方法:构建大顶堆;调整堆;交换数据
public class Demo8{
// 交换数据
public static void change(int[] arr,int a,int b){
int temp1=arr[a];
arr[a]=arr[b];
arr[b]=temp1;
}
//调整堆
public static void adjustHeap1(int[] arr,int start,int end){
//三个参数:调整数列,调整首位置,调整尾位置
int child;//子节点
int temp2=arr[start];
for(child=start*2+1;child<end;child=child*2+1){
if(child<end-1 && arr[child]<arr[child+1]){
child=child+1;
}
if(temp2>=arr[child]){
break;
}
arr[start]=arr[child];
start=child;
}
arr[start]=temp2;
}
//构建大顶堆
public static int[] buildHeap1(int[] arr){
int len=arr.length;
for(int i=len/2;i>=0;i--){
adjustHeap1(arr, i, len);
}
return arr;
}
//堆排序
public static void sortHeap1(int[] arr){
arr=buildHeap1(arr);
for(int le=arr.length-1;le>0;le--){
change(arr, 0, le);
adjustHeap1(arr, 0, le);
}
}
//测试方法:
public static void main(String[] args){//测试方法
int arr[]={7,4,8,3,5,2,1,6,10,27,12,23};
// System.out.println(arr);
arr=buildHeap1(arr);
System.out.print(" 构建的大顶堆是:");
for(int i=0;i<arr.length;i++){//逐项输出
System.out.print(arr[i]+" ");
}
sortHeap1(arr);
System.out.print(" 堆排序结果:");
for(int i=0;i<arr.length;i++){//逐项输出
System.out.print(arr[i]+" ");
}
}
}
程序运行结果:
构建的大顶堆是:27 12 23 10 7 8 1 6 3 5 4 2 堆排序结果:1 2 3 4 5 6 7 8 10 12 23 27
相关文章推荐
- 数据结构与算法(11)---Java语言实现:堆排序
- 数据结构与算法(7)---Java语言实现:快速排序
- heapsort堆排序(3种语言实现 c/java/python)
- 数据结构与算法(3)---Java语言实现:栈的单链表定义
- 数据结构与算法(9)---Java语言实现:希尔排序
- Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
- Heap Sort堆排序 Java语言实现
- 数据结构与算法(10)---Java语言实现:归并排序
- 堆排序(java 语言实现)
- 数据结构与算法(1)---Java语言实现:线性表的单链表定义
- 数据结构与算法(5)---Java语言实现:选择排序
- 数据结构与算法(6)---Java语言实现:冒泡排序
- 数据结构与算法(2)---Java语言实现:线性表的单链表定义:方法补充,实现单链表反转,去重
- 用纯JAVA语言编程读取MAC地址的实现
- java语言实现二分查找数据法
- 75KB JAVA语言实现的流媒体服务器-milgra0.8b
- Java语言中链表和双向链表的实现
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- JAVA 语言中链表和双向链表的实现
- Java语言基础12-存取方法(Access method)