【动手写排序】堆排序
来源:互联网 发布:ubuntu xorg 安装 编辑:程序博客网 时间:2024/05/18 11:49
public class HeapSort {
public void sort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=(i+1)/2-1;j>=0;j--){
createHeap(arr,j,i);
}
swap(arr,i,0);
}
}
public void createHeap(int[] arr,int j,int i){
int k=j+1;
int index;
if((2*k-1)>i)
return;
if(2*k<i){
index= arr[2*k-1]>arr[2*k]?2*k-1:2*k;
}else{
index=2*k-1;
}
if(arr[j]<arr[index]){
swap(arr,j,index);
createHeap(arr,index,i);
}
}
public void swap(int[] arr,int i,int j){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
@Test
public void test(){
int[] arr={9,8};
sort(arr);
for(int i:arr){
System.out.print(i+" ");
}
}
}
public void sort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=(i+1)/2-1;j>=0;j--){
createHeap(arr,j,i);
}
swap(arr,i,0);
}
}
public void createHeap(int[] arr,int j,int i){
int k=j+1;
int index;
if((2*k-1)>i)
return;
if(2*k<i){
index= arr[2*k-1]>arr[2*k]?2*k-1:2*k;
}else{
index=2*k-1;
}
if(arr[j]<arr[index]){
swap(arr,j,index);
createHeap(arr,index,i);
}
}
public void swap(int[] arr,int i,int j){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
@Test
public void test(){
int[] arr={9,8};
sort(arr);
for(int i:arr){
System.out.print(i+" ");
}
}
}
0 0
- 【动手写排序】堆排序
- 【动手写排序】冒泡排序
- 【动手写排序】选择排序
- 【动手写排序】希尔排序
- 【动手写排序】快速排序
- 【动手写排序】归并排序
- 【动手写排序】直接插入排序
- 动手实现 算法 之 “堆排序”
- 无聊写排序之 ---- 堆排序(HeadSort)
- 一步一步写算法--堆排序
- 自己写的堆排序。第一次写
- 排序算法动手研究
- 一步一步写算法(之堆排序)
- 堆排序(写的很好)
- python写希尔、堆、快速、归并排序
- 随便写了个堆排序程序
- 一步一步写算法(之堆排序)
- java写一个堆排序(大顶堆)
- 【动手写排序】快速排序
- linux 虚拟机安装VMware Tools
- 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数
- 【Leetcode Algorithm】Min Stack
- 创建循环双链表
- 【动手写排序】堆排序
- stm32学习笔记
- PostgreSQL游标使用举例
- 区间搜索(算法)
- 序列化战争:主流序列化框架Benchmark
- 【动手写排序】归并排序
- IOS--UI--LessonTouchView 触摸事件 & 响应者链
- Java集合中对象排序
- C#邮箱、附件发送