3—-插入排序
主要思想:每趟排序使局部有序,比如,选择一个选择一个需要排序的数据,那么他的前面所有数据都是排好序的,后面是无序的,将这个数插入到前面合适的位置,然后重复这个过程;
插入数据时,插入位置的数字需要向后移动,所以现将待排序的数据取出,留出一个空位置,这样可以使前面的数据向后移动,然后插入到合适位置;
代码如下:
public void insertSort(){
int in,out;
for(out=1;out<nElems;out++){
long temp=a[out];
in=out;
while(in>0 && a[in-1]>=temp){
a[in]=a[in-1];
--in;
}
a[in]=temp;
}
}
算法分析:
比较次数:第一次最多需要1次比较,第二趟最多需要3次,,,,,因此有1+2+3+4.。。N-1=N*(N-1)/2,然而,随机数据,凭据只有的数据进行了比较,所以标记次数为N*(N-1)/4,复制的次数大致等于比较的次数。然而比较时间和幅值时间不同,所以相对于冒泡排序,时间快一倍,比选择排序略快。时间复杂度为O(N^2).
如果数据是有序的,插入排序明显更好,但是如果是逆序,并不比冒泡好、

浙公网安备 33010602011771号