Java插入排序的研究

算法导论原书第三版中这样介绍插入排序:

对于少量的元素的排序,他是一个有效的算法,插入排序的工作方式就像许多人排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中的正确位置。为了找到一张牌的正确位置,我们从右到左将它与已在自己手中的每张牌进行比较。

下面给出他们给出的伪代码

根据伪代码再结合咱们强大的Java编程语言,可以这样实现它。

public class Sort {

    public static void main(String[] args) {
        int[] arr = {55, 98, 67,23, 54, 66};
        System.out.println("初始化关键字");
        printArray(arr);
        System.out.println();
        insertSort(arr);
        System.out.println("排序后的结果");
        printArray(arr);

    }
    /**
     * 插入排序方法
     * @param arr
     */
    public static  void insertSort(int[] arr){
        int i,j,key;
        for ( i =1; i < arr.length; i++){
            //假设第一个数据是排好序的,从数组中的第二个数据开始
                key = arr[i];
                j = i-1;
                //如果要插入的数据小于第j个数据,则将key往前移动插入
            while ( j >= 0 && key < arr[j]){
                arr[j+1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
            //打印每次排序后的结果
            System.out.println("第" + i + " 次排序的结果");
            printArray(arr);
        }

    }
    /**
     * 打印数组方法
     * @param arr
     */
    private static void printArray(int[] arr){
        for (int i : arr){
            System.out.print("\t" + i);
        }
        System.out.println();
    }
}

打印的结果如下:

算法分析:

看上边的肯定能分析出来,咱就不分析了。

效率分析:

插入排序存在最好和最坏的情况,如果你想使用插入排序降序,而刚好需要要排序的序列是降序的,那只需要比较n-1次

如果想使用插入序列升序,而需要排序的序列为降序,那就需要比较n(n-1)/2次。

插入排序不适合数据量比较大的排序应用。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值