java实现堆排序
2014-06-24 07:38
218 查看
import java.util.Random; /** * 堆排序 * 堆排序定义:n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) */ public class HeapSort { public static int N = 20; //数组的长度 /** * * @param R 待排序数组 */ private void buildHeap(int[] R){ int length = R.length; int begin = length/2 -1; //The last leaf node for(int i=begin;i>=0;i--) { heapify(R,length,i); //adjust heap } } /** * 调整无序为一个新的堆 * @param R 待调整数组R * @param start 调整数组的无序 * @param end 调整数组的无序区结束位置 */ private void heapify(int[] R,int hlen,int i){ int left =2*i+1; //节点i的左孩子节点 int right =2*i+2; //节点i的右孩子节点 int largest = i; int temp; while(left<hlen || right<hlen){ if(left<hlen && R[largest]<R[left]){ largest = left; } if(right<hlen && R[largest]<R[right]){ largest = right; } if(i !=largest){ //如果最大值不是父节点,则交换父节点和拥有最大值的子节点交换 temp=R[largest]; R[largest]=R[i]; R[i] =temp; i = largest; //新的父节点,以备迭代调堆 left = 2*i+1; //新的子节点 right =2*i+2; } else{ break; } } } /** * 打印输出数组数据 * @param R */ private void printArray(int[] R){ int length = R.length; for(int i=0;i<length;i++){ System.out.print(R[i]+","); if((i+1)%20==0) System.out.println(); } System.out.println(); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HeapSort obj = new HeapSort(); //堆排序 Random ran = new Random(); int[] R = new int ; //声明n+1个数组,R[0]作为交换位 for(int i=0;i<N;i++) { R[i]=ran.nextInt(100); // } obj.printArray(R); int hlen = R.length; int temp; //obj.printArray(R); //初始化后的输出 obj.buildHeap(R); //init heap // obj.printArray(R); //构建堆后的输出 obj.printArray(R); while(hlen>1){ temp = R[hlen-1]; R[hlen-1] = R[0]; R[0] =temp; hlen--; //堆的大小减一 obj.heapify(R, hlen, 0); //修改后重新调整堆 // obj.printArray(R); } // System.out.println(hlen); obj.printArray(R); // System.out.println("堆排序流程"); } }
相关文章推荐
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 自主实现的Java实现的构造大小堆、堆排序的算法
- 堆排序详解以及java实现
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 最大堆及堆排序的Java实现_world
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- [原]堆排序的java实现
- [转载]堆排序(HeapSort) Java实现
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- java 实现堆排序
- 算法导论Java实现-堆排序(6.4章节)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 堆排序(java实现)
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- Java实现快速排序、归并排序、堆排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- heapsort堆排序(3种语言实现 c/java/python)
- 堆排序及其JAVA实现