直接插入排序

思路:

对某一个元素,假设该元素前面都已经有序,元素后面元素都无序。

找到恰小于等于该元素的位置后插入该元素,同时此时该元素位置到之前该元素之间的元素位置都后移。

空间复杂度:O(1)

时间复杂度:O(n²)

是稳定的排序方法

#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <string.h> 
#include <algorithm>
using namespace std;
int A[1000]={0,49,38,65,97,76,13,27,49,55,4};
void InsertSort(int n){//n为数组大小 (从小到大)
    int i,j;
    for(i=2;i<=n;i++){//      假定i之前的数据已经排好序 
        if(A[i]<A[i-1]){//    后一项比前一项小,则需要交换 
            A[0]=A[i];         //记录当前元素到A0 
            for(j=i-1;A[0]<A[j];j--){          //把当前元素插入到恰好小于等于该元素后 
                A[j+1]=A[j];                   //从后往前移动 
            }
            A[j+1]=A[0];                       // 恰好小于等于该元素后插入该元素 
        }
    }
} 
int main(){
    InsertSort(10);
    for(int i=1;i<=10;i++){
        cout<<A[i]<<" ";
    }
    return 0;
}

 

posted @ 2020-07-09 19:28  Maxwell·  阅读(123)  评论(0编辑  收藏  举报