插入排序

什么是插入排序:


如 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容