其他分享
首页 > 其他分享> > 直接插入排序

直接插入排序

作者:互联网

直接插入排序

主要思想:
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