排序算法(三)直接插入排序

本文深入讲解了直接插入排序算法的工作原理,通过实例演示了排序过程,解析了算法的稳定性及时间复杂度。对比了直接插入排序与冒泡排序的区别,包括它们在查找最大值、不变条件、循环终止条件等方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接插入排序是一种最简单的插入排序。(O(N2)

/*3,1,5,4,2

第一次排序,1比3小,则1和3换位置,变为了1,3,5,4,2

第二次排序,5比3大,不需要调整,仍未1,3,5,4,2

第三次排序,4比5小,则4和5 换位置,此时4比3大,则不再继续调整,此时变为了1,3,4,5,2

第四次排序,2比5小,2和5换位置,2又比4小,2继续和4换位置,2仍然比3小,继续和3换位置,最后2比1大
,不再调整。最终,变成了1,2,3,4,5.
数据变成了有序。*/

1  直接插入排序的过程中,不需要改变相等数值元素的位置,所以它是稳定的算法。 

2  当数据正序时,执行效率最好,每次插入都不用移动前面的元素,时间复杂度为O(N)。 

    当数据反序时,执行效率最差,每次插入都要前面的元素后移,时间复杂度为O(N2)

  所以,数据越接近正序,直接插入排序的算法性能越好。 

 

区别

        1  冒泡时在 [未排序的部分] 里面找最大(或小),放到一端。插入是往 [已排序好] 的部分里面插入当前数。
        2  不变条件(invarient)不同:冒泡是,最大的数会先被排序好到一端。插入是当前点的一侧是已排序的( sorted ),
           这些数并不一定是最大的或者最小的。
        3  循环终止条件不同:冒泡必须遍历未排序的所有数字才能找到最大,插入找到合适位置就可以停。
        4  插入排序越往后面,动静越大(两两比较(第二个会和前(前移动继续向前移动)后比较,),找一个合适的位置,)
           因为涉及到的元素越来越多;
        5  冒泡排序越往后面(一轮两两排序找到最大或者最小固定位置,再继续剩下两个元素两两排序),
           动静越小,因为涉及到的元素越来越少。
public class InsertSort {

         public static void main(String[] args) {
             int[] sort ={3,1,5,4,2} ;
             System.out.println("排序前:");
             print(sort);
             insertSort(sort);
             System.out.println("\n排序后:");
             print(sort);
         }

         public static void  insertSort(int[]a){
             for (int i=1;i<a.length;i++){
                 int j;
                 int tmp=a[i];
                 for (j=i-1;j>=0&&a[j]>tmp;j--){
                     a[j+1]=a[j];
                 }
                 a[j+1]=tmp;
             }

         }
         public static  void  print(int[]a){
             for (int i=0;i<a.length-1;i++){
                 System.out.println(a[i]+" ");
             }
         }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值