直接插入排序(JAVA版)

本文详细介绍了一种简单的排序算法——直接插入排序的过程,并通过实例演示了排序步骤,分析了其时间复杂度。

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

直接插入排序

已知一组,一组无序数据b[1]、b[2]、……b[m],需将其变成一个升序数列。先创建一个变量a。首先将不b[1]与b[2],如果b[1]大于b[2]则交换位置,否则不变;再比较b[2]与b[3],如果b[3]小于b[2],则将b[3]赋值给a,再将a与b[1]比较,如果a小于b[1];则将b[2],b[1]依次后移;在将a放在b[1]处以此类推,直到排序结束


public class insertSort {

   

       public static void main(String[] args)

       {

           int maxSize=100;

           ArrayIns arr;

           arr=new ArrayIns(maxSize);

           arr.insert(77);

           arr.insert(99);

           arr.insert(44);

           arr.insert(55);

           arr.insert(22);

           arr.insert(88);

           arr.insert(11);

           arr.insert(00);

           arr.insert(66);

           arr.insert(33);

           arr.display();

           arr.insertSort();

           arr.display();

       }

    }

 

    class ArrayIns

    {

       private int[] a;

       private int nElems;

      

       //构造函数

       public ArrayIns(int max)

       {

           a=newint[max];

           nElems=0;

       }

      

       //插入数据

       public void insert(int value)

       {

           a[nElems]=value;

           nElems++;

       }

      

       //显示数组数据

       public void display()

       {

           for(int j=0;j<nElems;j++)

               System.out.println(a[j]+" ");

              System.out.println(" ");

       }

      

      

       public void insertSort()

       {

           int out,temp,in;

           for(out=1;out<nElems;out++)

           {

              temp=a[out];

              in=out;

              while(in>0&&a[in-1]>=temp)//寻找插入位置

              {

                  a[in]=a[in-1];

                  in--;

              }

              a[in]=temp;

           }

       }

      

      

    }

 

原数组:    77 99 44 55 22 88 11 0 66 33

插入第一趟:77 99 44 55 22 88 11 0 66 33 比较1次

插入第二趟:44 77 99 55 22 88 11 0 66 33 比较2次

插入第三趟:44 55 77 99 22 88 11 0 66 33 比较3次

插入第四趟:22 44 55 77 99 88 11 0 66 33 比较4次

插入第五趟:22 44 55 77 88 99 11 0 66 33 比较5次

插入第六趟:11 22 44 55 77 88 99 0 66 33 比较6次

插入第七趟:0  11 22 44 55 77 88 99 66 33 比较7次

 

插入第八趟:0  11 22 33 44 55 77 88 99 66 比较8次

插入第九趟:0  11 22 33 44 55 66 77 88 99 比较9次

 

插入排序效率分析:

比较的次数:

1+2+3+4+5+6+7+8+9=45;

当数组的元素为N时,比较的次数为:N*(N-1)/2;

所以比较的次数为:o(N*N);

当数组全部有序的时候,将一个数插入到有序数组中时,需要比较N-1次。

所以比较的次数为:o(N);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值