栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

排序算法一直接插入排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序算法一直接插入排序

排序算法一直接插入排序 算法思想:

每次将一个待排序的记录按照其关键字大小插入到前边已排好序的子序列中,直到全部记录插入完成为止。**

图中下标为0-4的元素已经排好序了,下标为5-6的元素为待排序元素,现在指针或者下标指向5号元素13,我们需要将13插入到其左边排好序的元素中,即可完成对下标为5的元素的排序,之后依次对未排序元素进行上述操作即可。观察可知,待排序元素的左边的元素因为已经排好序了,所以总是有序的。

代码实现:
public class insertSort {
    public static void main(String[] args) {
        int[] nums = {3,8,4,5,6,8,9,0};
        insort(nums,nums.length);
        for(int num:nums){
            System.out.print(num);
        }
    }
    public static void insort(int[] nums, int n){
         int i,j;
         for(i=1;i=0 && nums[j]>temp ;--j){
                     nums[j+1] = nums[j];
                 }
                 nums[j+1] = temp;
             }
         }
    }
}
空间时间复杂度

空间复杂度: O(1)
时间复杂度:
主要来自于对比关键字、移动元素。若有n个元素,则需要n-1趟处理。
最好时间复杂度:原始数据有序,n-1趟处理总共需要n-1次关键字对比,时间复杂度为O(n)
最坏时间复杂度:原始数据逆序
第1趟:对比关键字2次,移动元素3次;
第2趟:对比关键字3次,移动元素4次;
第 i i i趟:对比关键字 i + 1 i+1 i+1次,移动元素 i + 2 i+2 i+2次;
第 n − 1 n-1 n−1趟:对比关键字 n n n次,移动元素 n + 1 n+1 n+1次;
最坏情况时间复杂度为:O(n^2)
平均时间复杂度为:O(n^2)

算法稳定性: 因为对于两个相同关键字的排序并没有破坏数据原始的相对顺序,因此插入排序算法是稳定的。

简单优化

因为待排序关键字要插入的序列总是有序,所以可以通过二分查找来寻找待排序关键字的插入位置。

代码实现:

public static void insort2(int[] nums, int n){
        int i,j,low,high, mid;
        for(i=1;itemp){
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
            for(j=i-1;j>=high+1;--j){
                nums[j+1] = nums[j];
            }
            nums[high+1] = temp;
        }
    }

比起直接插入排序,比较关键字的次数减少了,但是移动元素的次数没变,时间复杂度依然是O(n^2)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号