直接插入排序
作者:互联网
直接插入排序
主要思想:
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;
}
标签:排序,int,插入排序,元素,循环,后移,直接 来源: https://blog.csdn.net/baiqi123456/article/details/118941646