数据结构

插入排序

2018-09-21  本文已影响0人  一个人的飘

什么是插入排序:


如 1 2 6 5 4

第1步:1不动

第2步:2比1大 2不动

第3步:6比2大 6不动

第4步:5比6小,交换5和6的位置,5比2大,5的位置不动

变成12564

第5步:4比6小,交换4和6的位置,5比4大,交换4和5的位置,4比2大,所以位置不动

最后结果12456

代码

public class sort {

public  static  void main(String args[])

{

int array[]={1,24,3424,2,4,1,242,556,34,23,5,13,4};

        array=paixu(array);

        for(int i=0;i

{

System.out.println(array[i]);

        }

}

public static int[]paixu(int [] array)

{

int exchange=0;

        for(int i=1;i

{

for(int j=i-1;j>=0&&array[j]>array[j+1];j--)

{

exchange=array[j+1];

                    array[j+1]=array[j];

                    array[j]=exchange;

            }

}

return  array;

    }

}


插入排序也有缺点就是其每次比较大小后都要进行交换,一次交换是3次赋值,影响效率。可以变成一次赋值,如:用变量保存第i个元素的值,如果前一个元素比后一个元素大,则前一个元素移到后一个元素位置,一直到小于为止,将变量的值赋给该位置元素,这样会大大提高效率


如 1 2 6 5 4

第1步:1不动

第2步:2比1大 2不动

第3步:6比2大 6不动

第4步:5比6小,用x保存5,将6赋值给5的位置,5比2大,将x的值赋值

变成12564

第5步:4比6小,用x保存4,将6的值赋给4的位置,5比4大,将5的值赋给6的位置,4比2大,所以将x的值赋给空余的位置。

最后结果12456


public class sort {

public  static  void main(String args[])

{

int array[]={1,24,3424,2,4,1,242,556,34,23,5,13,4};

        array=paixu(array);

        for(int i=0;i

{

System.out.println(array[i]);

        }

}

public static int[]paixu(int [] array)

{

int j;

        int exchange;

        for(int i=1;i

{

exchange=array[i];

            for (j=i;j>0 &&array[j-1]>exchange;j--)

{

array[j]=array[j-1];

            }

array[j]=exchange;

        }

return  array;

    }

}

对于相对有序数组,插入排序效率要高,时间复杂度为on2

上一篇下一篇

猜你喜欢

热点阅读