首页 > 代码库 > 直接插入排序

直接插入排序

先上代码。

/****  @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\n",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