直插排序

直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

代码: 

package paixu;

public class Zhicha {
    /*
     * 直接插入排序
     *
     * 参数说明: a -- 待排序的数组 n -- 数组的长度
     */
    static void insert_sort(int a[], int n) {
        int i, j, k;
        for (i = 1; i < n; i++) {
            // 为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
            for (j = i - 1; j >= 0; j--) { // 将a[i]前的元素逐个和a[i]比较,如果比a[i]小的话,说明已经排序过,直接跳出到
                                            // 到 if (j != i - 1)
                // 这时j 一定等于 i - 1,那么此次排序结束 如果a[j]>大于a[i]
                // 则证明还有数据没有排序,继续循环,找到a[i]前元素中比a[i]大的元素中最小的那个元素 简称 min
                // 然后再循环一次 将循环到 min前的那个元素,因为min前的那个元素肯定是比a[i]小,那么跳出循环 到 if (j !=
                // i - 1)判断 如果符合条件进行操作
                if (a[j] < a[i])
                    break;
            }
            // 如找到了一个合适的位置- 意思是从 min开始向后移动,将原来的min这个下标让出来给a[i]
            if (j != i - 1) {
                // 将比a[i]大的数据向后移
                int temp = a[i];
                for (k = i - 1; k > j; k--)
                    a[k + 1] = a[k];
                // 将a[i]放到正确位置上
                a[k + 1] = temp;
            }

            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] a = { 45, 78, 90, 26, 84, 21 };
        insert_sort(a, a.length);
        for (int i : a) {
            System.out.println(i);
        }
    }
}
View Code

以  {20,30,40,10,60,50}为例进行一次排序 

参考 :http://www.cnblogs.com/skywang12345/p/3596881.html

posted @ 2016-12-09 14:56  臭屁猪  阅读(909)  评论(0编辑  收藏  举报