作业
2016-03-13 21:00
295 查看
package sort;
import java.util.ArrayList;
import java.util.List;
public class HeapSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[] = {16,4,10,14,7,9,3,2,8,1,0,23,15,13};
// array= arrayAdapter(array);
// maxHeapify2(array,0);
// buildMaxHeap(array);
heapSort2(array);
print(array);
}
private static void print(List<Integer> list) {
for(int i=0;i<list.size();i++){
System.out.println((list.get(i)));
}
}
public static List<Integer> heapSort(int[] a){
buildMaxHeap(a);
List<Integer> list = new ArrayList<Integer>();
for(int i=a.length-1;i>0;i--){
int larger = a[0];
list.add(larger);
a[0] = a[i];
// a[i] = larger;
System.arraycopy(a, 0, a, 0, i);
maxHeapify2(a, 0);
}
return list;
}
public static void heapSort2(int[] a){
buildMaxHeap(a);
for(int i=a.length-1;i>0;i--){
int larger = a[0];
a[0] = a[i];
a[i] = larger;
maxHeapify3(a,i, 0);
}
}
private static void maxHeapify3(int[] array, int length, int i) {
int j = length;
int l = 2*i+1;
int r = 2*i +2;
int largest = 0;
if(l<j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify3(array,length,largest);
}
System.out.println("largest: "+largest +" int i = "+i);
}
public static void maxHeapify(int[] array,int i){
int j = array.length;
int l = 2*i;
int r = 2*i +1;
int largest = 0;
if(l<=j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<=j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify(array,largest);
}
}
public static void buildMaxHeap(int[] a){
int j = a.length;
double d = Math.floor(j/2.0);
int i = (int)d;
for(;i >=0;i--){
maxHeapify2(a, i);
}
}
public static void maxHeapify2(int[] array,int i){
int j = array.length;
int l = 2*i+1;
int r = 2*i +2;
int largest = 0;
if(l<j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify2(array,largest);
}
}
public static int[] arrayAdapter(int[] array){
int a[] = new int[array.length+1];
a[0] = Integer.MAX_VALUE;
for(int j=0;j<array.length;j++){
a[j+1] = array[j];
}
return a;
}
public static void print(int[] array){
for(int i=0,j=array.length;i<j;i++){
System.out.println(array[i]);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class HeapSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[] = {16,4,10,14,7,9,3,2,8,1,0,23,15,13};
// array= arrayAdapter(array);
// maxHeapify2(array,0);
// buildMaxHeap(array);
heapSort2(array);
print(array);
}
private static void print(List<Integer> list) {
for(int i=0;i<list.size();i++){
System.out.println((list.get(i)));
}
}
public static List<Integer> heapSort(int[] a){
buildMaxHeap(a);
List<Integer> list = new ArrayList<Integer>();
for(int i=a.length-1;i>0;i--){
int larger = a[0];
list.add(larger);
a[0] = a[i];
// a[i] = larger;
System.arraycopy(a, 0, a, 0, i);
maxHeapify2(a, 0);
}
return list;
}
public static void heapSort2(int[] a){
buildMaxHeap(a);
for(int i=a.length-1;i>0;i--){
int larger = a[0];
a[0] = a[i];
a[i] = larger;
maxHeapify3(a,i, 0);
}
}
private static void maxHeapify3(int[] array, int length, int i) {
int j = length;
int l = 2*i+1;
int r = 2*i +2;
int largest = 0;
if(l<j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify3(array,length,largest);
}
System.out.println("largest: "+largest +" int i = "+i);
}
public static void maxHeapify(int[] array,int i){
int j = array.length;
int l = 2*i;
int r = 2*i +1;
int largest = 0;
if(l<=j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<=j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify(array,largest);
}
}
public static void buildMaxHeap(int[] a){
int j = a.length;
double d = Math.floor(j/2.0);
int i = (int)d;
for(;i >=0;i--){
maxHeapify2(a, i);
}
}
public static void maxHeapify2(int[] array,int i){
int j = array.length;
int l = 2*i+1;
int r = 2*i +2;
int largest = 0;
if(l<j && array[l]>array[i])
largest = l;
else
largest = i;
if(r<j && array[r]>array[largest])
largest = r;
if(i != largest){//需要重新堆化
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify2(array,largest);
}
}
public static int[] arrayAdapter(int[] array){
int a[] = new int[array.length+1];
a[0] = Integer.MAX_VALUE;
for(int j=0;j<array.length;j++){
a[j+1] = array[j];
}
return a;
}
public static void print(int[] array){
for(int i=0,j=array.length;i<j;i++){
System.out.println(array[i]);
}
}
}
相关文章推荐
- Python设计模式(2)-策略模式
- 20135302魏静静——linux课程第三周实验及总结
- STC12C5A60S2单片机-双串口通信
- 多态的作用
- 三大集群
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式:
- 系统集成3月9日作业
- LeetCode 217 Contains Duplicate
- 【机房重构】——加入外观、工厂和接口的三层
- Fragment的使用(三)
- ajax重定向问题
- 第一章读书笔记
- coreboot学习2:项目源码的初步了解
- 客户端文件上传分享
- u-boot的配置
- DRIVER_OBJECT,DEVICE_OBJECT 结构体分析
- GSON源码解析
- ecshop登录超时、session过期的解决办法
- MongoDB学习—(6)MongoDB的find查询比较符
- css 实现垂直居中的常用方法