码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构排序问题---堆排序及各种排序时间空间复杂度

时间:2014-10-24 18:29:10      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   for   sp   数据   div   

堆排序基本思路:根据完全二叉树,建立最大最小堆来排序

时间复杂度: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; 
                    
                }  
            }  
        }  
    }   
}

 

各种排序复杂度:

bubuko.com,布布扣

具体分析:http://blog.sina.com.cn/s/blog_771849d301010ta0.html

数据结构排序问题---堆排序及各种排序时间空间复杂度

标签:style   blog   http   color   ar   for   sp   数据   div   

原文地址:http://www.cnblogs.com/hardwork/p/4048587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!