插入排序) 希尔排序 (最小增量排序)

/**
 * (插入排序) 希尔排序 (最小增量排序)
 * @author Cinn
 *
 */
public class shellSort {

/**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array= {48,58,50,98,69,51,27,99,100};
        shleesort(array);
        printArray(array);
    }
    
    /**
     * 希尔排序接口
     * @param array
     */
    public static void shleesort(int[] array){
        int temp = 0;
        int d = array.length;
        while(true){
            d = d/2;
            for(int x=0;x<d;x++){
                for (int i = x+d; i < array.length; i+=d) {
                    temp = array[i];
                    int j = i-d;
                    for(;j>=0&&temp<array[j];j-=d){
                        array[j+d] = array[j];
                    }
                    array[j+d] = temp;
                }
            }
            if(d==1){
                break;
            }
        }
    }

public static void printArray(int[] array){
        for(int i=0;i<array.length;i++){   
            System.out.println(array[i]);   
        }   
    }
}

在本次希尔排序中,因为   for(;j>=0&&temp<array[j];j-=d){写成了成for(;j>0&&temp<array[j];j-=d){,导致元素中的第一个元素始终排序不到。纠结了半天。以后要注意这些低级错误。

时间: 2024-11-05 12:47:03

插入排序) 希尔排序 (最小增量排序)的相关文章

程序员需要掌握的排序算法之希尔排序(最小增量排序)

希尔排序(最小增量排序) 基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. package sortalgorithm; public class PublicShellSort { static void shellSort() { int[] sortList = { 1, 3, 2, 4, 10, 7, 8, 9, 5, 6 }; int n = 1,len = s

排序算法3--插入排序--希尔排序(缩小增量排序)

希尔排序(缩小增量排序) 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高. 以n=10的一个数组4

直接插入排序&&冒泡排序&&希尔排序(缩小增量排序)源码

public class DirectRank { public static void main(String[] args) { DirectRank aa=new DirectRank(); try { aa.judge(args); } catch (TestDefinException e2) { e2.printStackTrace(); } Integer[] a=new Integer[args.length]; try{for(int i=0;i<args.length;i++

排序 之 冒泡排序 简单选择排序 直接插入排序 希尔排序

排序的基本概念 假设含有n个记录的序列为{r1,r2,--,rn},其相应的关键字分别为{k1,k2,--,kn},需确定1,2,--,n的一种排序p1,p2,--,pn,使其相应的关键字满足kp1≤kp2≤--≤kpn非递减(或非递增)关系,即使得序列称为一个按关键字有序的序列{rp1,rp2,--,rpn},这样的操作就称为排序. 排序的稳定性 假设ki=kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中ri领先于rj(即i<j).如果排序后ri仍领先于rj,则称所用的排序方法是稳定

插入排序 —— 希尔排序

 希尔排序  希尔排序也是插入排序的一种.又名缩小增量排序.它是对直接插入排序的一种改进. 直接插入排序是每次都和前面一个元素进行比较.其步长为 1. 希尔排序则不然,它得步长是动态变化的,或者说是由大到小变化的.希尔排序根据步长将整个序列分成n组.然后在各个子组内部分别进行元素的排序.接着缩小步长,相应的序列被分成的子组也就会减少,每个分组内部的元素个数也就相应的增加.接着对子组内部的元素进行排序.再次缩小步长,再次排序....直到步长为 1,即整个序列只有一个子组,也就是序列本身.这个时候再

冒泡排序,快速排序,归并排序,插入排序,希尔排序,堆排序,计数排序,桶排序,基数排序

选择排序,冒泡排序,快速排序,归并排序,插入排序,希尔排序,计数排序,桶排序,基数排序 以上是一些常用的排序算法. 选择排序 for(int i = 0; i < n; i++) { int minval = a[i]; int minid = i; for (int j = i+1; j < n; j++) { if (a[j] < minval) { minid = j; minval = a[j]; } } swap(a[i], a[minid]); } 最简单的就是选择排序,就是

Java实现希尔排序(增量递减排序)

1 package Insert.sort; 2 3 import java.util.Scanner; 4 5 /*又叫缩小增量排序,本质是插入排序,将待排的序列增量分成几个子序列,分别对每个子序列进行直接插入排序 6 * 增量为5时,取1.6.11.16...为一组,2.7.12.17...为一组等,分别对这些组进行直接插入排序,就是一趟希尔排序 7 * 再以增量为3分割,构成组,分别对这些组进行直接插入排序,就是第二趟希尔排序 8 * 增量为1分割,就是将整个序列进行一趟直接插入排序...

插入排序—希尔排序(Shell`s Sort)原理以及Java实现

希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序. 操作方法: 选择一个增量序列t1,t2,-,tk,其中ti>tj,tk=1: 按增量序列个数k,对序列进行k 趟排序: 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序.仅增量因子为

内部排序-&gt;插入排序-&gt;希尔排序

文字描述 希尔排序又称缩小增量排序,也属于插入排序类,但在时间效率上较之前的插入排序有较大的改进. 从之前的直接插入排序的分析得知,时间复杂度为n*n, 有如下两个特点: (1)如果待排序记录本身就是"正序"时, 其时间复杂度可减少为n. (2)当待排序记录数很小时,直接插入排序的效率也比较高; 希尔排序正是从这两点分析出发对直接插入排序进行了改进.它的基本思想是:先将整个待排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全