InsertSort

复制代码
package Sort;

/**
 * 最坏情况:当待排序序列为逆序状态,首先遍历整个序列,之后一个一个地将待插入元素放在已排好序的序列最前面,之后的所有元素都需要向后移动一位,时间复杂度为O(n^2)
 * 最好情况:当待排序序列为正序状态,则遍历完整个序列,当插入元素时,只比较一次就够了,所以时间复杂度为O(n)
 * 稳定性:  当待插入元素与有序序列中比较的元素相等时,将待插入元素直接插入在该相等元素的后面。所以,两个元素位置的前后顺序没有改变,故插入排序是稳定的
 */
/**
 * 1.将第一个待排序的序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
 * 2.从头到尾一次扫描未排序的序列,将扫描到的每个元素插入有序序列的适当位置
 * (在这里需要注意一个问题,如果在有序序列中有一个和待插入的元素相等,则将待插入的元素查到此元素的后面,这样方式的插入排序是稳定的。
 *  如果插入到此元素的前面,那么此种方式的插入排序是不稳定的)
 * */

public class InsertSort {

    public static void main(String[] args) {
        int[] arr = new int[]{18, 4, 69, 3, 10, 20, 87, 33};
        insertSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void insertSort(int[] arr) {
        if (arr.length == 1 || arr == null) {
            return;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j= i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {//符合条件,插入元素(交换位置)
                    int temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
        }
    }
}
复制代码

 

posted @   坤坤无敌  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示