Java排序算法——堆排序
来源:互联网 发布:软件开发java 高级证书 编辑:程序博客网 时间:2024/06/01 07:24
堆排序
堆排序原理:数组表示堆,若根节点存在序号0处,i节点的父节点就为(i-1)/2。i节点的左右节点下标分别是2*i+1和2*i+2.
若是升序排序,则建立大顶堆,反之若是降序排序,则建立小顶堆。
堆排序是首先建堆,输出堆顶元素,将堆顶元素与最后一个元素交换,这样第n个位置作为有序区,前n-1个位置为无序区,对无序区不断进行上述操作,直到有序去增长到n-1,则排序完成。
时间效率:
空间效率:
算法稳定性:不稳定
import java.util.Scanner;//堆排序(从小到大排序)public class Sort_h{ public void heapSort(int nums[]){ int len = nums.length; for(int i = 0;i<len-1;i++){ buildHeap(nums,len-i-1);//建堆 //交换堆顶元素 swap(nums,0,len-i-1); } System.out.println(java.util.Arrays.toString(nums)); } //建立大顶堆 private void buildHeap(int []nums,int length){ int len = length; for(int i =(len-1)/2;i>=0;i--){ int left = i*2+1;//左节点 //判断右节点是否存在且是否大于左节点 if(left<len){ if(nums[left]<nums[left+1]){ left++; } } //判断父节点是否大于子节点 if(nums[i]<nums[left]){ int temp = nums[i]; nums[i] = nums[left]; nums[left] = temp; } } } //交换函数 private void swap(int nums[],int i,int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } //测试函数 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int nums[] = new int[10]; for(int i = 0;i<10;i++){ nums[i] = scanner.nextInt(); } scanner.close(); Sort_h test = new Sort_h(); test.heapSort(nums); }}
阅读全文
0 0
- Java排序算法——堆排序
- 排序算法—堆排序
- 排序算法—堆和堆排序
- 堆排序算法——Java实现
- 算法—堆排序—Java实现
- 排序算法——堆排序算法
- 《排序算法》——堆排序(大顶堆,小顶堆,Java)
- Java实现排序算法——堆排序
- 排序算法——堆排序(java语言描述)
- Java排序算法 堆排序
- Java排序算法:堆排序
- java排序算法 堆排序
- Java排序算法 堆排序
- 堆排序—Java
- 堆排序—Java
- Java堆排序算法
- Java 堆排序算法
- Java堆排序算法
- 计算你能获得的最大收益。风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。
- css基础浮动相关知识
- 444 股票交易
- rsa加密
- java中super关键字的用法
- Java排序算法——堆排序
- XML与HTML的主要差异
- 面向对象编程 —— 类的分类
- JMS(三)ActiveMQ简单的HerlloWord示例
- Java 数据库系列教程--MySQL优化与sql优化
- POJ 2955-Brackets
- SDUT 2772 数据结构实验之串一:KMP简单应用
- springMvc注解
- APP微信支付PHP服务器demo