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

希尔排序与堆排序(Java版)

时间:2015-07-26 22:44:00      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:希尔排序   堆排序   

希尔排序

技术分享
技术分享

package ShellSort;

import Utils.SortUtils;

public class Demo {

    public static void shellSort(int[] a){

        int temp,j;
        int increment = a.length;

        do{
            increment = increment/3+1;//如果是直接插入排序,这里的increment都为1。
            //System.out.println(increment);
            for (int i = increment; i < a.length; i++) {
                if(a[i]<a[i-increment]){
                    temp = a[i];//暂存于temp中

                    for (j=i-increment; j>=0 && a[j]>temp; j-=increment) {
                        a[j+increment] = a[j];//记录后移,查找插入位置
                    }
                    a[j+increment] = temp;//插入
                }
            }
        }while(increment>1);    
    }

    public static void main(String[] args) {
        int[] a = {2,3,5,4,1,6,9,8,7};
        shellSort(a);
        SortUtils.printString(a);
    }
}

复杂度分析

技术分享
技术分享

堆排序

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

package HeapSort;

import Utils.SortUtils;

public class Demo02 {

    //堆排序
    public static void heapSort(int[] a){
        int len = a.length;
        //将待排序数据构建为大顶堆
        for(int i=(a.length-1-1)/2;i>=0;i--){
            heapAdjust(a,i,len);
        }

        for (int i = a.length-1; i > 0; i--){
            //将队顶值与当前未经排序子序列的最后一个值交换
            SortUtils.swap(a,0,i);
            heapAdjust(a,0,--len);//重新调整大顶堆
        }

    }

    //将待排序序列构建成一个大顶堆
    public static void heapAdjust(int[] a,int s,int len){

        int temp;
        temp = a[s];
        for (int i = 2*s+1; i < len; i++) {
            if(i<len-1 && a[i]<a[i+1]){
                i++;//i为关键字中较大的记录的下标
            }

            if(temp>=a[i]){//如果父节点本身就大于最大的子节点,终止循环
                break;
            }
            a[s] = a[i];
            s = i;
        }
        a[s] = temp;
    }

    public static void main(String[] args) {
        int[] a = {2,3,5,4,1,6,9,8,7};
        heapSort(a);
        SortUtils.printString(a);
    }
}

复杂度分析

技术分享
技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

希尔排序与堆排序(Java版)

标签:希尔排序   堆排序   

原文地址:http://blog.csdn.net/scgaliguodong123_/article/details/47071429

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