直接插入排序
主要思想:
1. 外层循环是遍历除第一个元素(排序元素)以外的每个元素。
2. 中间循环是进行元素后移操作。
3. 第一个元素默认是一个有序的序列。
4. a[0]相当于一个临时变量。
用图表现出上面的四个思想
假设最外面的循环已经遍历到第4个排序元素
即i=4,a[i]=6
a[0]=a[i];
j=i-1;
while循环后移
第一次
第二次
因为a[0]>a[j]所以跳出循环
a[j+1]=a[0];
然后外循环指向下一个元素即i=5
C语言实现如下,f(a,n)为排序函数
#include<stdio.h> //从小到大排序 void f(int *a,int length){ int i,j; for(i=2;i<=length;i++){//因为第一个元素默认相当于是一个已经排好的一个元素的序列,所以从第二个排序元素开始 a[0]=a[i];//用临时变量记录当前元素a[i] j=i-1;//定位到前面排好序的最后一个元素 while(a[0]<a[j]){//将大于a[i]的元素后移 a[j+1]=a[j]; j=j-1; } a[j+1]=a[0];//插入a[i] } //输出 for(i=1;i<=length;i++){ printf("%d ",a[i]); } } int main(){ int a[6]={0,10,241,13,24,25};//5个排序元素,a[0]相当于一个临时变量 f(a,5);//传数组a的地址,以及排序元素的个数 return 0; }





