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

直接插入排序

时间:2015-09-18 20:09:11      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

1.原理
直接插入排序原理和插牌方法类似,它将数组看作有序元素和无序元素组成的数组,把无序的元素插入到有序的数组中。
已知待排序数组a=[4,2,1,3].

综述:4为待插入数,4>2,变为[2,4,1,3];  1为待插入数,4>1和2,变为[1,2,4,3];  3为待插入数,4>3,3>1和2,变为[1,2,3,4].        
第一次排序:
有序元素:[4],待插数:2
抓到2,因为4>2,将4后移,即a[1]=4;
[4,4]
再将2插到a[0]中,即a[0]=2;
[2,4]
第二次排序:
有序元素:[2,4],待插数:1
抓到1,因为4>1,将4后移,即a[2]=4;
[2,4,4]
因为2>1,将2后移,即a[1]=2;
[2,2,4]
再将1插入到a[0]中,即a[0]=1;
[1,2,4]
第三次排序:
有序元素:[1,2,4],待插数:3
抓到3,因为4>3,将4后移,即a[3]=4;
[1,2,4,4]
因为2<3,无需将剩余有序数组元素和3比较,将3插入到a[2],即a[2]=3;
[1,2,3,4]


2.代码实现
public class InsertSortTest {  
         //遍历数组
    public static void cc(int a[]){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
    public static void Test(int a[]) {
        for (int i = 1; i < a.length; i++) {          //从第二个数开始
            int temp = a[i];                //设置待插入数
            int j = i - 1;
            while (j >= 0 && a[j] > temp) {               //将待插入的数和前面的有序数组元素进行比较
                a[j + 1] = a[j];                            //如果前面的有序数组元素大于待插入数,则将有序数组元素后移
                InsertSortTest.cc(a);
                j--;
            }
            a[j + 1] = temp;                 //如果某有序数组元素小于待插入数,终止后移,并且在该元素后插入待插入数
            InsertSortTest.cc(a);
        }
    }  
    public static void Test1(int a[]) {
        for (int i = 1; i < a.length; i++) {
            int temp = a[i];
            while (i >= 1 && a[i-1] > temp) {
                a[i ] = a[i-1];
                i--;
            }
            a[i] = temp;
        }
    }   
    public static void Test2(int a[]) {
        for (int i = 1; i < a.length; i++) {
            int temp = a[i];
            int j=i-1;
            for(;j>=0;j--){
                if(a[j] > temp){
                a[j + 1] = a[j];
                InsertSortTest.cc(a);
                }
                else{
                    break;
                }
            }
            a[j+1] = temp;    
            InsertSortTest.cc(a);
        }
    }  
    public static void main(String[] args) {
        int a[]={4,2,1,3};
        InsertSortTest.Test(a);
    }
}

技术分享

直接插入排序

标签:

原文地址:http://www.cnblogs.com/jfl-xx/p/4820085.html

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