插入排序

  1. 基本思想:
    排序算法之插入排序,将待排序的序列分为两部分,待排序和已排序,与选择排序不一样的是,插入排序每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。
/**
* 直接插入排序:
* 注意所有排序都是从小到大排。
*/

public class InsertSort {   

    /**  
     * 排序算法的实现,对数组中指定的元素进行排序  
     * @param array 待排序的数组  
     * @param from 从哪里开始排序  
     * @param end 排到哪里  
     * @param c 比较器  
     */  
    public void insert(Integer[] array, int from, int end) {   

        /*  
         * 第一层循环:对待插入(排序)的元素进行循环  
         * 从待排序数组断的第二个元素开始循环,到最后一个元素(包括)止  
         */  
        for (int i=from+1; i<=end; i++) {   
            /*  
             * 第二层循环:对有序数组进行循环,且从有序数组最第一个元素开始向后循环  
             * 找到第一个大于待插入的元素  
             * 有序数组初始元素只有一个,且为源数组的第一个元素,一个元素数组总是有序的  
             */  
            for (int j = 0; j < i; j++) {   
                Integer insertedElem = array[i];//待插入到有序数组的元素   
                //从有序数组中最一个元素开始查找第一个大于待插入的元素   
                if ((array[j].compareTo(insertedElem)) > 0) {   
                    //找到插入点后,从插入点开始向后所有元素后移一位   
                    move(array, j, i - 1);   
                    //将待排序元素插入到有序数组中   
                    array[j] = insertedElem;   
                    break;   
                }   
            }   
        }


     /**  
     * 数组元素后移  
     * @param array 待移动的数组  
     * @param startIndex 从哪个开始移  
     * @param endIndex 到哪个元素止  
     */  
    public void move(Integer[] array, int startIndex, int endIndex) {   
        for (int i = endIndex; i >= startIndex; i--) {   
            array[i+1] = array[i];   
        }   
    }       
    /**  
     * 测试  
     * @param args  
     */  
    public static void main(String[] args) {   
        Integer[] intgArr = { 5, 9, 1, 4, 2, 6, 3, 8, 0, 7 };   
        InsertSort insertSort = new InsertSort();   
        insertSort.insert(intgArr,0,intgArr.length-1);
        for(Integer intObj:intgArr){
            System.out.print(intObj + " ");
        }
    }   
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值