直接插入排序

先上代码。

/**
**  @author:hushunfeng
**    直接插入排序
    从小到大进行排列
*/
#include<stdio.h>

void insertSort(int *array,int arraySize) {
    //用于缓存被插入数
    int temp;
    int i;
    int j;
    for(i=1;i<arraySize;i++) {
        //将被插入数先进行缓存
        temp = array[i];
        //将被插数和“已排好序的各个元素”进行比较
        //比较顺序为从后往前
        //一旦不符合if语句内的条件,跳出for循环
        for(j=i-1;j>=0;j--) {
            if(temp<array[j]) {
                array[j+1] = array[j];
            }
            else break;
        //将temp中的数据放到相应的位置
        array[j] = temp;
        }
    }
}

void display(int *array,int num) {
    int i;
    for(i=0;i<num;i++) {
        printf("%d
",array[i]);
    }
}

void main() {
    int array[8] = {4,10,9,7,8,3,6,5};
    insertSort(array,8);
    display(array,8);
}

 注意点:将被插数和“已排好序的各个元素”进行比较只能是从后往前!不能从前往后!!理由:被插数的内容是已经被缓存起来了,所以说可以用挨着它的元素里的数据刷新掉这个被插数内容,如果从前往后,有用的,没有缓存着的数据被更改刷新了。

直接插入排序的思路:

1. 从第一个元素开始,该元素可以认为已经被排序

2. 取出下一个元素,在已排序序列中从后向前扫描

3. 如果已排序中的元素大于/小于新元素,将该排序中的这个元素后移(其实并不是大批量数据的移动,一次只移动一个位置,将其移动到下一个位置)

4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5. 将新元素插入到移动后腾空出来的位置

6. 重复步骤2~5

原文地址:https://www.cnblogs.com/hushunfeng/p/3892539.html