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

希尔排序

时间:2015-08-02 11:35:09      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

package sort;

import java.util.Scanner;

public class ShellSort {
    public static int arr[];
    static{
        System.out.println("Please enter the array to sort,and split by ‘,‘: ");
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        String n[]=s.split(",");
        arr= new int[n.length];
        System.out.print("Before sort: ");
        for(int i=0;i<arr.length;i++){
            arr[i]=Integer.parseInt(n[i]);
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void main(String args[]){
        int m=arr.length-1;
        shellSort(m);
        System.out.print("After sort: ");
        for(int i=0;i<arr.length;i++)
            System.out.print(arr[i]+" ");
        System.out.println();
    }
    public static void shellSort(int m){
        int temp=0,p=0;
        int d=(m+1)/2;  //初始分组是数组长度的一半,即两个数一组
        while(d>=1){  //只要有分组就对每个分组排序
            for(int i=d;i<=m;i++){  //i从每个分组的第二个元素开始扫描
                temp=arr[i];  //记录当前待排序的数
                p=i-d;  //p是同一个分组的前一个数
                //从当前位置开始,向前找待排序数temp应该在的位置
                while(p>=0 && temp<arr[p]){  //如果当前待排序的数比同组的前一个数小
                    arr[p+d]=arr[p];  //就把同组的前一个数移到当前位置来
                    p-=d;  //p继续向前移,d其实是周期,按周期移动其实就保证了同组
                }
                arr[p+d]=temp;  //p+d是找到的位置,放入当前待排序的数temp
            }
            System.out.print("Sort results for "+d+" : ");
            for(int k=0;k<arr.length;k++)
                System.out.print(arr[k]+" ");
            System.out.println();
            d/=2;  //下次分组时上一次分组的一半
        }
    }

}

 

希尔排序

标签:

原文地址:http://www.cnblogs.com/lvbubu/p/4695208.html

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