首页 > 代码库 > 数据结构排序问题---堆排序及各种排序时间空间复杂度
数据结构排序问题---堆排序及各种排序时间空间复杂度
堆排序基本思路:根据完全二叉树,建立最大最小堆来排序
时间复杂度:O(nlongn)
/** * */package com;/** * @author wenb * @time 下午03:52:55 * @date 2014-10-24 */public class HeapSort { public static void main(String args[]){ int[] a = {1,3,2,21,5,12,98,54}; headSort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static int[] headSort(int[] sortArray){ for(int i=0;i<sortArray.length-1;i++){ buildMaxHeap(sortArray,sortArray.length-1-i); swap(sortArray,0,sortArray.length-1-i); } return sortArray; } //交换两个数据的方法 public static void swap(int[] data,int i,int j){ int temp = data[i]; data[i] = data[j]; data[j] = temp; } //建立最大堆 public static void buildMaxHeap(int[] data,int lastIndex){ //从lastIndex节点的父节点开始舰堆 for(int i=(lastIndex-1)/2;i>=0;i--){ //保存正在判断的节点 int k = i; //这里为每个节点建立大顶堆,只要这个根节点还有子节点 while((2*k+1) <= lastIndex){ //假设左节点的值时最大的 int biggerIndex = 2*k+1; //说明还有右节点是存在的 if(biggerIndex < lastIndex){ //选出子节点中最大的值 if(data[biggerIndex] < data[biggerIndex+1]){ biggerIndex++; } } //将跟节点与子节点进行比较 if(data[k] < data[biggerIndex]){ swap(data,k,biggerIndex); k = biggerIndex; }else{ break; } } } } }
各种排序复杂度:
具体分析:http://blog.sina.com.cn/s/blog_771849d301010ta0.html
数据结构排序问题---堆排序及各种排序时间空间复杂度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。