直接插入排序法---排序算法(一)
1.排序原理
从小到大排序
从第二个数开始比较,将其与前一个数比较,如果小于前一个数,则插入,使其前面数是从小到大排列
例如 数组为:38 65 97 76 13 27 49
i=2 65>38,所以不要动
i=3 97>65,所以不要动
i=4 76<97, 所以要将76插入到65到97之间 ,为 38 65 76 97 13 27 49
i=5 13<97,所以要将13插入到38之前,使其从小到大排列 为 1338 65 76 97 27 49
i=6 27<97,所以要将27插入到13与38之间,使其从小到大排列 为 13 27 38 65 76 97 49
i=6 49<97,所以要将49插入到38与65之间,使其从小到大排列 为 13 27 38 49 65 76 97
排序结束
2.代码
#include <stdio.h> //打印数组 void printArray(int a[],int size){ printf("数组为:[%d] ",a[0]); for (int i=1;i<size;i++) { printf(" %d ",a[i]); } printf("\n"); } void main(){ //a[0]为监视哨 int a[8]={0,38,65,97,76,13,27,49}; for (int i=2;i<=7;i++) { printf(" i=%d ",i); printArray(a,8); if(a[i]<a[i-1]){ a[0]=a[i]; a[i]=a[i-1]; for (int j=i-2;a[0]<a[j];j--) { a[j+1]=a[j]; } a[j+1]=a[0]; } } printf("结果 "); printArray(a,8); }
3.结果
从小到大
i=2 数组为:[0] 38 65 97 76 13 27 49 i=3 数组为:[0] 38 65 97 76 13 27 49 i=4 数组为:[0] 38 65 97 76 13 27 49 i=5 数组为:[76] 38 65 76 97 13 27 49 i=6 数组为:[13] 13 38 65 76 97 27 49 i=7 数组为:[27] 13 27 38 65 76 97 49 结果 数组为:[49] 13 27 38 49 65 76 97
从大到小
i=2 数组为:[0] 38 65 97 76 13 27 49 i=3 数组为:[65] 65 38 97 76 13 27 49 i=4 数组为:[97] 97 65 38 76 13 27 49 i=5 数组为:[76] 97 76 65 38 13 27 49 i=6 数组为:[76] 97 76 65 38 13 27 49 i=7 数组为:[27] 97 76 65 38 27 13 49 结果 数组为:[49] 97 76 65 49 38 27 13