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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keheinash/article/details/53539971

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

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

这里写图片描述

代码:

#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],即如果两个记录相等,不会发生后移,相对位置保持不变。事实上,相等的记录也没必要变动位置,因此直接插入排序是一种稳定的排序算法。

猜你喜欢

转载自blog.csdn.net/keheinash/article/details/53539971
今日推荐