0基础学C#笔记08:插入排序法


前言

我们在玩打牌的时候,你是怎么整理那些牌的呢?一种简单的方法就是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。当我们给无序数组做排序的时候,为了要插入元素,我们需要腾出空间,将其余所有元素在插入之前都向右移动一位,这种算法我们称之为插入排序。


一、过程简单描述:

1、从数组第2个元素开始抽取元素。

2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边。

3、继续选取第3,4,….n个元素,重复步骤 2 ,选择适当的位置插入。

为方便理解我还准备了动图:
在这里插入图片描述
如果还是不懂的话我还给你准备了优质的文章讲解:插入排序

二、代码

public class InsertSort {
    
    
    public static int[] insertSort(int[] arr) {
    
    
        if(arr == null || arr.length < 2)
            return arr;

        int n = arr.length;
        for (int i = 1; i < n; i++) {
    
    
            int temp = arr[i];
            int k = i - 1;
            while(k >= 0 && arr[k] > temp)
                k--;
            //腾出位置插进去,要插的位置是 k + 1;
            for(int j = i ; j > k + 1; j--)
                arr[j] = arr[j-1];
            //插进去
            arr[k+1] = temp;
        }
        return arr;
    }
}

总结

性质:
1、时间复杂度:O(n2)
2、空间复杂度:O(1)
3、稳定排序
4、原地排序

猜你喜欢

转载自blog.csdn.net/BeanGo/article/details/132208175