美文网首页
直接插入排序

直接插入排序

作者: 点一下我的id | 来源:发表于2018-12-18 21:15 被阅读0次

直接插入排序(插入排序)

1.基本代码
2.优化代码
3.算法分析

基本思想:

每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。

(即边插入边排序,保证子序列中随时都是排好序的)


Screen Shot 2018-12-18 at 20.25.27.png
#include<iostream>
using namespace std;
int main()
{
    int n=6,a[6]={21,25,49,25,16,8};//定义 n为整数,a为整数组
    for(int i=2,j,t;i<=n;i++)       //趟数i=n-1
    {
        for(j=i-2,t=a[i-1];j>=0;j--)    //比较次数不确定,用t存a[i-1]
        {
            if(a[j]>t)      //如果前面的数比后面的大
            {
                a[j+1]=a[j];    //往后移动
            }
            else
            {
                break;
            }   
        }
        a[j+1]=t;//a[j+1]存a[i-1]
        
    }
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";//8 16 21 25 25 49
    return 0;
}
#include <iostream>
using namespace std;
#define N 2
int main(int argc, const char * argv[]) {
    // insert code here...
    int A[N]={3,1};
    int i,x,j;
    for(i=1;i<N;i++){
        x=A[i];
        for(j=i-1;j>=0;j--){
            if(A[j]>x){
                A[j+1]=A[j];
            }else{
                break;
            }
        }
        A[j+1]=x;
    }
    for(i=0;i<N;i++)
        cout<<A[i]<<" ";
    return 0;
}

优化代码

void InsertSort(SqList &L)
 {int i,j;
   for(i=2;i<=L.length;++i)
     if( L.r[i].key<L.r[i-1].key)//将L.r[i]插入有序子表
       { L.r[0]=L.r[i]; // 复制为哨兵
          L.r[i]=L.r[i-1];
          for(j=i-2; L.r[0].key<L.r[j].key;--j)
                L.r[j+1]=L.r[j]; // 记录后移 
         L.r[j+1]=L.r[0]; //插入到正确位置
       }
 }

算法分析

设对象个数为n,则执行n-1趟比较次数和移动次数与初始排列有关
最好情况下: 每趟只需比较 1 次,不移动。 总比较次数为 n-1
最坏情况下:第 i 趟比较i次,移动i+1次


Screen Shot 2018-12-18 at 21.29.37.png

若出现各种可能排列的概率相同,则可取最好情况和最坏情况的平均情况平均情况比较次数和移动次数为n2/4

时间复杂度为 o(n2)
空间复杂度为 o(1)
是一种稳定的排序方法

相关文章

  • 插入排序

    一、直接插入排序 二、折半插入排序

  • 【数据结构】【C#】013-插入类排序:🥇直接插入排序(稳定)

    插入排序:直接插入排序(稳定) 【 算法思想 】 直接插入排序是一种最基本的插入排序方法,其基本操作是将第 i 个...

  • 排序——插入排序

    业精于勤荒于嬉 插入排序包括:直接插入排序、折半插入排序、希尔排序(缩小增量排序) 一、直接插入排序 1. 算法思...

  • 常用算法

    插入排序 包括直接插入排序和希尔插入排序 直接插入排序 将一个记录插入到已经排序好的有序表中。 sorted数组的...

  • 算法(排序)

    一、内部排序 1、插入排序—直接插入排序(Straight Insertion Sort) 2、插入排序—希尔排序...

  • 直接插入排序

    //直接插入排序

  • iOS算法

    排序方法 选择排序:直接选择排序、堆排序。 交换排序:冒泡排序、快速排序。 插入排序:直接插入排序、二分法插入排序...

  • 几种实用的简易的排序算法

    也是面试题 一、插入排序 1.插入排序—直接插入排序(Straight Insertion Sort) 思路 遍历...

  • 2.1-插入排序-直接插入

    参考链接 插入排序:直接插入排序(Straight Insertion Sort) 白话经典算法系列之二 直接插入...

  • 经典排序算法-希尔排序Shell sort

    一、希尔排序思想 希尔排序是基于插入排序的快速的排序算法,先分组后对每组进行直接插入排序,再分组再直接执行插入排序...

网友评论

      本文标题:直接插入排序

      本文链接:https://www.haomeiwen.com/subject/ieglkqtx.html