java插入排序

import javax.naming.ldap.SortControl;

/**
 * 原理:分成有序区和无序区,将无序区的元素a[i]从后向前逐一与有序区的元素a[j]进行比较,
 * 若a[j]>a[i],则将a[j]放到a[j+1]位置,即查找与换位同时进行, 直到找到一个a[j]<a[i]将a[i]
 * 放置到a[j+1]位置。此过程循环n-1次,查找完成
 * 
 * 时间复杂度 平均情况:O(n^2) 最坏情况:O(n^2),该情况出现在原序列为逆序情况
 * 最好情况:O(n),出现在已经为升序排列的情况,每次之比较一次即可,共n-1次循环,故为n-1
 * 
 * 稳定性:稳定
 * */
public class 插入排序 {

    public int[] inertSort(int[] a, int n) {
        int x;
        int i, j;
        for (i = 1; i < n; i++) {
            x = a[i];
            for (j = i - 1; j >= 0; j--) {
                if (a[j] > x)
                    a[j + 1] = a[j];
                else
                    break;
            }
            a[j + 1] = x;
        }
        return a;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] a = new int[] { 25, 56, 32, 20, 1, 5, 89, 3, 8, 41 };
        插入排序 sort = new 插入排序();
        sort.inertSort(a, a.length);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

}

 

posted on 2013-10-11 12:41  tianyuanshgan  阅读(249)  评论(0编辑  收藏  举报

导航