排序算法1.插入排序

排序算法1.插入排序
插入排序的核心思想:
参考笔记:
http://blog.csdn.net/han_xiaoyang/article/details/12163251
建议大家在看了笔记的核心思想后,自己在纸上画一下,大概的内部排序过程。
看完楼上连接的笔记有感:
插入排序就是在已排序的数组内,插入一个元素。
核心操作:不断的从已排序的数组末尾比较,找到新元素的位置插入(构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
已排序的数组:数组内的元素从a[0] …. 不短递增。当以排数组a.length = 数组总长度时,我们的插入排序就结束了。

以下是我写的简单的java demo。

引用图片

编码思路:
int array[] = {4,3,1,2};

  1. 第1次
    array[0] 为一个已排序的数组【数组len =1】插入元素a[1]。比较 a[1] , a[0] ,如果 a[1] < a[0] ,开始位置交换。数组{3,4,1,2} 第一次插入结束。

  2. 第2次
    array[0,1] 为一个已排序的数组【数组长度 =2】,插入元素a[2]。 先比较a[2],a[1], 如果a[2] < a[1] ,位置交换 数组{3,1,4,2} 接续比较a[1],a[0],位置交换 数组{1,3,4,2}.

  3. 第i次
    array[0,….a[i-1]] 为一个以排序的数组【数组长度 =i】,插入元素a[i]。先比较a[i],a[i-1],如果a[i] < a[i-1] ,位置交换。比较a[i-1],a[i-2]直到新插入的元素a[i]的值不小于前面的值,插入完成。

写到这里,我可以得出以下结论(demo为升序排列,降序排列以此类推):
1.如果要实现位置交换,i 从1 开始需要满足 a[i] < a[i -1] ;
2.第i次插入,最多比较 i 次。

public class ArrayInsertSort {

    public static void main(String[] args) {
        int array[] = {4,3,1,2};

            for(int i = 1 ; i < array.length;i++){
                //循环,获取即将插入的元素a[i];
                if(array[i]<array[i-1]){
                    //比较 a[i]与以排序数组末尾 a[i-1] 的值
                    for(int j = i ; j>0 ; j--){
                        int temp = array[j]; 
                        if(array[j]<array[j-1]){
                            System.out.println("外层第"+i+"次比较数组交换位置 :" +array[j]  +"<-->" + array[j-1]);
                            array[j] = array[j-1];
                            array[j-1] = temp;
                        }else{
                            break;
                        }
                    }   
                }
            }
            System.out.println("快速排序之后的结果");
            for(int i:array){
                System.out.println(i);
            }


    }

}

你可能感兴趣的:(排序算法)