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

插入排序

时间:2018-12-31 23:42:16      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:void   具体步骤   比较   遍历   乱序   部分   快捷   nbsp   ++   

插入排序类似于整理扑克牌,基本操作是将一个记录分为有序数列、待插入数列,将待插入数列依次插入到有序数列中对应的位置,最终得到一个有序的数列;

插入排序的时间复杂度为O(n^2),空间复杂度为O(1),是稳定的排序方法,适用于数量较少的排序,相对冒泡排序而言是一种较为快捷方便的排序算法。

具体步骤:
1.默认序列中第0个元素是有序的;
2.从下标为1的元素开始,取当前下标i位置处的元素a[i]保存到一个临时变量waitInsert中;
3.对前半部分有序序列循环遍历,并与waitInsert比较,直到遇到一个比waitInsert小的元素(这里默认从小到大排序),此时的下标为j,那么现在只需要对a[j+i]进行赋值waitInsert即可;
4.将待插入元素的下标i向后推移一个位置;
5.重复2~4步骤,直到乱序序列中的元素全部被插入到有序序列中;

示例代码:
public class Test {

    public static void main(String[] args) {
        
        int[] arr = {6, 3, 8, 2, 9, 1};
        System.out.println("排序前数组为:");
        for(int i : arr) {
            System.out.print(i + ", ");
        }
        System.out.println();
        sort(arr);
        
        System.out.println("排序后数组为:");
        for(int i : arr) {
            System.out.print(i + ", ");
        }
        
    }
    
    public static void sort(int[] arr) {
        for(int i=1; i<arr.length; i++) {
            int j = i;
            int waitInsert = arr[i];
            while(j > 0 && waitInsert < arr[j - 1]) {
                arr[j] = arr[j-1];
                j--;
            }
            arr[j] = waitInsert;
        }
    }
    
    
    
}




插入排序

标签:void   具体步骤   比较   遍历   乱序   部分   快捷   nbsp   ++   

原文地址:https://www.cnblogs.com/yuanfei1110111/p/10203576.html

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