• 插入排序


    算法流程:

    将第i个元素插入其左边(或右边)的有序元素中。对于第i个元素,其左边的元素a[0], a[1], a[2], ... a[i-1]是有序的。

    从第2个元素(即i=1)开始,直到最后一个元素,依次进行如下过程:

    a[i]与a[i-1]比较,若a[i]<a[i-1]则交换a[i]与a[i-1];

    a[i-1]与a[i-2]比较,若a[i-1]<a[i-2]则交换a[i-1]与a[i-2];

    直到不满足a[k]<a[k-1]或进行到最后一组元素a[1]与a[0]

    示例如下:

    实现代码:

    	public static void insertionSort(int[] a) {
    
    		int N = a.length;
    		int temp;
    
    		for (int i=1; i<N; i++) {
    
    			for (int j=i; j>0 && a[j]<a[j-1]; j--) {
    
    				temp = a[j];
    				a[j] = a[j-1];
    				a[j-1] = temp;
    			}
    		}
    	}
    

    算法复杂度:

     若数组的某些部分是有序的,插入排序对这样的数组很有效。

    倒置指的是数组中两个顺序颠倒的元素。如E X A M P L E中,共有E-A、X-A、X-M、X-P、X-L、X-E、M-L

    M-E、P-L、P-E、L-E  11对倒置。

    倒置数与排序中的交换数是相同的。对于上述数组中的元素M与其左边的元素只有倒置X-M,又由于左边的元素是有序的故只需要交换一次,及X-M。

    同理,元素E与其左边的元素的倒置有X-E、M-E、P-E、L-E,故需要交换4次。

    算法稳定性:

    插入排序是稳定的。

    其他性质:

    与选择排序相比:

  • 相关阅读:
    lua判断字符串包含另一个字符串
    expect使用技巧
    Linux expect
    expect正则捕获返回结果
    修改alpine Linux的Docker容器的时区
    Dockerfile镜像优化,减小镜像
    Sed在匹配行前后加入一行
    scp的使用以及cp的对比
    rsync 的用法
    傅里叶系列(一)傅里叶级数的推导 (转)
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8231142.html
Copyright © 2020-2023  润新知