排序算法--插入排序之直接插入排序

直接插入排序的核心思想是把一个记录插入一个有序序列中,每插入一个记录就得到一个新的有序序列,直到所有记录都插入成功,得到有序序列。

每次插入记录时的有序序列如何得到,关键在第一次,第一次要插入的记录时序列的第二个值,有序序列只有一个值,就是第一个记录。

这里写图片描述

代码:

#include <string.h>
#include <malloc.h>
#include <iostream>

using namespace std;

void printArray(int a[], int n){
    for(int j= 0; j < n; j++){  
            cout<<a[j] <<" ";  
    }  
        cout<<endl;
}

void DirectInsertSort(int a[], int n){
    for(int i = 1; i < n; i++){
        if(a[i] < a[i-1]){//比有序序列的最后一个值小,在有序序列中查找位置插入
            int x = a[i];//记录待插入记录,因为等下这个位置可能会被后移的记录“占用”
            int j = i - 1;
            for(; j >= 0; j--){//有序序列范围从从0到i-1
                if(x < a[j]){//比当前记录小,还要往前查找
                    a[j+1] = a[j];//当前记录往后移,给待插入记录“腾出”位置
                }
                else{
                    break;
                }
            }
            a[j+1] = x;//j+1就是要插入的位置
        }
        printArray(a, 10);
    }
}

int main(){
    int a[10] = {10,2,3,238,7,7,2005,0,412,9};
    DirectInsertSort(a, 10);
}

时间复杂度:O(n^2)
稳定性:从代码里看,记录后移的条件是x < a[j],即如果两个记录相等,不会发生后移,相对位置保持不变。事实上,相等的记录也没必要变动位置,因此直接插入排序是一种稳定的排序算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值