zoukankan      html  css  js  c++  java
  • DSA——直接插入排序笔记

    不需要额外申请空间,从数组的第二个元素即 a[1]开始,将其设为key

    用key依次从后【key的前一个元素】比较,当key比当前值小时候,把当前值到Key原位置之间的元素依次向后移动一个单元。

    key>=当前值以后,把key复制给当前值后面的值即可。

    *保证了Key值之前的所有元素都是sorted的。

    void InsertSort(int a[], int n)
    {
    	int i, j, key;
    	for (i = 1; i < n; i++)
    	{
    		j = i - 1;
    		key = a[i];
    		while (j >= 0 && key<a[j])
    		{
    			a[j + 1] = a[j];
    			j--;
    		}
    		a[j + 1] = key;
    	}
    }
    

    空间复杂度O(1);

    时间复杂度:

        最好:数组为正序排序,只需要执行for循环,因为key>a[j],直接执行a[j+1]=key即可——O(n)

        最坏:逆序,for+while=O(n^2)

    平均就是O(n^2)【对于随机排序的数组,移动和比较次数更接近最坏情况】

    稳定:

    key<a[j]保证了稳定性


    //0305复习,有点蒙来着
    1、忘记设置key
    2、寻找j--的时候以及向后移动的时候用了两个循环竟然。。一个就完全可以做到,可以边寻找边移动
    因为没写明白所以时间复杂度也没分析对。。

    //0314复习。基本语句可以写出来,0305出现的问题2也记得了,可惜1 依然忘记设置key.会被覆盖的呀

  • 相关阅读:
    WebStorm2020.3.0及以下安装激活方法
    CSS随堂笔记【狂神说JAVA】
    HTML随堂笔记【狂神说JAVA】
    JAVA语言基础随堂笔记
    js 常用类和方法
    js 数组
    js 对象和函数
    js 基础语法
    JavaScript 简介
    PS基础
  • 原文地址:https://www.cnblogs.com/Cherrylalala/p/6477239.html
Copyright © 2011-2022 走看看