插入排序

来源:互联网 发布:网络风暴检测工具 编辑:程序博客网 时间:2024/06/14 06:44

插入排序的核心思想是将一个待排序的元素插入到有序表中的合适位置,使之继续保持有序,然后重复上述步骤最终完成排序。这里类似于抓扑克牌,每次抓一张牌我们都会将其插入到合适的位置,使手上的牌一直保持有序。对数组使用插入排序算法,就是从数组第二个元素开始从后往前进行相邻元素判断比较,通过交换位置寻求合适的插入位置。

public static void chaRu(int[] arr){    for(int i=1;i<arr.length;i++){//这里视第一个元素为有序的,所以只需要对角标为1到n-1的元素进行插入即可        //这里判断arr[j]是否比前一个元素arr[j-1]小,如果arr[j]较小则此时需要查到arr[j-1]元素前,在数组中就是交换位置,这里j>0是保证arr[j-1]元素角标不越界        for(int j=i;j>0 && arr[j]<arr[j-1];j--){//这个判断条件其实可以写到for循环体中,但这并没有利用数组中已经有序的前端,所以这只会增加无谓的比较            int temp=arr[j];            arr[j]=arr[j-1];            arr[j-1]=temp;        }    }}        

这里分析其时间复杂度,在最好情况即数组有序时,只需要n-1次比较和0次移动,其时间复杂度为O(n),在最差情况即数组逆序时,需要1+2+...+n-1=n(n-1)/2次比较和等次数的移动,其时间复杂度为O(n^2)。从平均意义上来说,时间复杂度为O(n^2),且插入排序的比较和移动次数也约为n(n-1)/4次,而选择排序的比较次数恒为n(n-1)/2次,所以总体上来说,插入排序的性能是略优于选择排序和冒泡排序的,所以在简单排序算法中,插入排序是性能最为优异的。插入排序空间性能是O(1),也为稳定排序。


接下来介绍复杂排序算法,首先就是希尔排序


原创粉丝点击