插入排序-学习笔记

插入排序的思想主要是,把没有排序的数插入到已经拍好序的数组中的恰当位置,在最开始的时候,待排序的数据从a[1]中选取,因为数组中的第一个数最看作成是已经排好序的数组了,然后把待排序的数和排好序的数组从后向前依次比较,当发现比排好序的数大时,则插入到这个数的后面,插入排序是稳定的,

代码如下:

#include<cstdio>
int main(){
    int a[20],n,temp;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<n;i++){ //从待排序数组中的选取第一个数

        temp=a[i];   //把待排数据放到临时数据中
        int j=i-1;   //这个J代表的是已经排好序的最后一个数的下角标
        while(j>=0&&a[j]>temp){ //当J没有达到数组的第一个数,并且临时数据比当前排好序的数小时,进去循环
            a[j+1]=a[j];    //将排好序的数组向后移动
            j--;
        }
        if(j!=i-1){  //这个主要是当没有发生替换时,防止多余的计算
            a[j+1]=temp; //把临时数据插入到排好序数组中的恰当位置
        }
    }
    for(int i=0;i<n;i++){
        printf("%d ",a[i]);
    }
}

 

posted @ 2017-07-25 11:16  漫游的鱼  阅读(157)  评论(0)    收藏  举报