直接插入排序(JAVA版)

来源:互联网 发布:mysql 视图 union all 编辑:程序博客网 时间:2024/05/20 17:07

直接插入排序

已知一组,一组无序数据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);

原创粉丝点击