堆排序 (包括升序和降序,Arraylist 实现)
来源:互联网 发布:linux操作系统下载 编辑:程序博客网 时间:2024/06/15 04:19
补充上一篇
利用Arraylist实现的堆排序(包含升序和降序)
import java.util.ArrayList;import java.util.Random;//采用Arraylist实现堆排序public class Main { //为了方便 采用索引从 1 开始 private static int N = 10;// 数组的大小 static Random rand = new Random(); public static void main(String[] args) { // TODO Auto-generated method stub test_HeapSort_DES(); test_HeapSort_ASC(); } private static void test_HeapSort_DES() { // TODO Auto-generated method stub ArrayList<Integer> arrayList=new ArrayList<>(); arrayList.add(-1); for (int i = 1; i <= N; i++) { arrayList.add(rand.nextInt(1000)); } System.out.println("排序前:"); print(arrayList); System.out.println("排序后(降序):"); print(HeapSort_DES(arrayList)); } private static void test_HeapSort_ASC() { // TODO Auto-generated method stub ArrayList<Integer> arrayList=new ArrayList<>(); arrayList.add(-1); for (int i = 1; i <= N; i++) { arrayList.add(rand.nextInt(1000)); } System.out.println("排序前:"); print(arrayList); System.out.println("排序后(升序):"); print(HeapSort_ASC(arrayList)); } private static ArrayList<Integer> HeapSort_ASC(ArrayList<Integer> arrayList) { // TODO Auto-generated method stub Build_Max_Heap(arrayList); ArrayList<Integer> temp=new ArrayList<>(); temp.add(-1);//方便打印 while(arrayList.size()>1){ temp.add(1,arrayList.get(1));//与逆序的差别 每次插在第一个 arrayList.remove(1); Max_Heapfy(arrayList,1); } return temp; } private static ArrayList<Integer> HeapSort_DES(ArrayList<Integer> arrayList) { // TODO Auto-generated method stub Build_Max_Heap(arrayList); ArrayList<Integer> temp=new ArrayList<>(); temp.add(-1);//方便打印 while(arrayList.size()>1){ temp.add(arrayList.get(1)); arrayList.remove(1); Max_Heapfy(arrayList,1); } return temp; } private static void Build_Max_Heap(ArrayList<Integer> arrayList) { // TODO Auto-generated method stub int length=arrayList.size()-1; for(int i=length/2;i>0;i--){ Max_Heapfy(arrayList, i); } } private static void Max_Heapfy(ArrayList<Integer> arrayList, int i) { // TODO Auto-generated method stub if(arrayList.size()<=1) return; int l=left(i); int r=right(i); int largest=0; if(l<arrayList.size() && arrayList.get(l)>arrayList.get(i)){ largest=l; }else{ largest=i; } if(r<arrayList.size() && arrayList.get(r)> arrayList.get(largest)){ largest=r; } if(largest!=i){ int temp = arrayList.get(i); arrayList.set(i, arrayList.get(largest)); arrayList.set(largest, temp); Max_Heapfy(arrayList,largest); } } private static int right(int i) { // TODO Auto-generated method stub return 2*i+1; } private static int left(int i) { // TODO Auto-generated method stub return 2*i; } //打印 private static void print(ArrayList<Integer> arrayList) { // TODO Auto-generated method stub for(int i=1;i<arrayList.size();i++){ System.out.print(arrayList.get(i)+"\t"); } System.out.println(); }}
结果截图
阅读全文
0 0
- 堆排序 (包括升序和降序,Arraylist 实现)
- 冒泡排序(包括升序和降序)
- 堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)
- 冒泡排序(升序和降序)的python代码实现
- 冒泡排序实现升序和降序排列
- Java冒泡排序(升序和降序)
- Java选择排序(升序和降序)
- 排序问题,升序和降序
- 数列排序(数列的升序和降序)
- 快速排序:升序+降序----java实现
- 同一按钮,实现升序,降序 排序
- 对数组进行升序和降序排序
- 快速排序的升序和降序
- 堆排序(降序)
- 函数指针作为函数参数,实现冒泡排序的升序排序和降序排序
- 使用python原生态的min和max函数实现升序排序和降序排序
- 升序和降序(小练习)
- javascript 升序和降序
- Python生成器
- 01背包问题(最易理解的讲解)
- 解决“suse12无法登录,显示module is unknown”问题
- js观察者模式
- ConfigurationSettings.AppSettings 已过时
- 堆排序 (包括升序和降序,Arraylist 实现)
- CentOS 6.x安装配置GitLab(企业版Git管理)
- nginx安装
- secureCRT常用指令
- window.location.hash 使用说明
- 微信小程序入门实例——swiper
- 弹性布局学习笔记
- shell学习笔记
- Android多用户之UserManagerService源码分析