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

直接插入排序

时间:2018-11-03 01:50:37      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:col   line   原理   span   ext   pre   sequence   color   insert   

原理

直接插入排序:每一步将一个待排序的记录,插入到前面已经排好序的有序列中去,直到插完所有元素为止。

流程

已知数组【3,1,4,2,7,8,6,5】,(当前元素和他之前的元素进行比较)

第一次排序:从索引1位置开始,比较 3 和 1,3 > 1,3 和 1 交换,结果为【1,3,4,2,7,8,6,5】

第二次排序,从索引2位置开始,比较 3 和 4, 3 < 4,不需要调整,结果仍为【1,3,4,2,7,8,6,5】

第三次排序:从索引3位置开始,比较 4 和 2,4 > 2, 4 和 2 交换【1,3,2,4,7,8,6,5】,

                      继续比较 3 和 2,3 > 2,3 和 2 交换 【1,2,3,4,7,8,6,5】,

                      继续比较 1 和 2,1 < 2, 不需要调整,结果为【1,2,3,4,7,8,6,5】

第四次排序,从索引4位置开始,比较 4 和 7,4 < 7  不需要调整,结果为【1,2,3,4,7,8,6,5】

第五次排序,从索引5位置开始,比较 7 和 8,7 < 8  不需要调整,结果为【1,2,3,4,7,8,6,5】

第六次排序,从索引6位置开始,比较 8 和 6,8 > 6,8 和6 交换【1,2,3,4,7,6,8,5】,

                       继续比较 7 和 6,7 > 6,7 和 6 交换,【1,2,3,4,6,7,8,5】,

                       继续比较 4 和 6,4 < 6,不需要调整,结果为【1,2,3,4,6,7,8,5

第七次排序,从索引7位置开始,比较 8和 5,8 > 5, 8 和 5 交换【1,2,3,4,6,7,5,8】,

                      继续比较 7和 5, 7 > 5,7 和 5 交换【1,2,3,4,6,5,7,8】,

                      继续比较 6 和 5 ,6 > 5,6 和 5 交换【1,2,3,4,5,6,7,8】,

                      继续比较 4 和 5, 4 < 5 ,不需要调整,结果为【1,2,3,4,5,6,7,8】

排序结束。

复杂度

在最好的情况下,需要比较n-1 次,无序交换元素,时间复杂度为o(n), 在最坏的情况下,时间复杂度为o(n^2)

代码

package sequence;

import java.util.Arrays;

/**
 * 插入排序
 */
public class InsertionSort {
    public static void insertionSort(int[] arr){
        for(int i=1;i<arr.length;i++){
            for (int j = i; j >0 ; j--) {
                if(arr[j]<arr[j-1]){
                    swap(arr,j,j-1);
                }
            }
        }

        System.out.println(Arrays.toString(arr));
    }
    public static void swap(int[] arr,int i,int j){
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }

    public static void main(String[] args) {
        insertionSort(new int[]{3,1,4,2,7,8,6,5});
    }
}

 

直接插入排序

标签:col   line   原理   span   ext   pre   sequence   color   insert   

原文地址:https://www.cnblogs.com/naloy/p/9898946.html

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