今天学的是插入排序
插入排序对相对有序的序列来说比较有快
学习插入排序的话,我感觉还是要自己在电脑上面用画板模拟一下过程
原理搞懂了代码也就不会写错
我感觉一定要对循环的边界条件进行深入思考,想明白为什么
这里还是推荐那个b站上面的视频
插入排序视频点我

该排序从后面获取一个元素依次向前比较,找到合适的位置进行插入
#include <stdio.h>
/*
1.这个函数是进行选择排序的
2.需要一个无序数组和数组的长度
3.该函数没有返回值
*/
void insertsort(int arr[],int len)
{
int temp;
for(int i=1;i<len;i++){//外层循环从1开始(也就是数组里面第二个数)因为默认第一个数已经有序
//默认第一个数已经有序不需要排了
for(int j=i;j>0 && arr[j-1]>arr[j];j--){//j的条件为1的时候就是最后两个数了,
//所以j的最后一轮不能为0,这样就会出现arr[-1]的情况造成越界
//排序是找到一个新的数,从后面插入到前面,
//所以后面的数比前面的数小就交换位置,
//否则就结束本轮子循环进入下一轮父循环
//记住这里是j和j-1进行比较因为这个排序是从后向前的
temp=arr[j-1];
arr[j-1] = arr[j];
arr[j]=temp;//交换顺序
}
}
}
int main()
{
int len;
int arr[]={3,1,2,8,7,4,3,9,4,0};
len=sizeof(arr)/sizeof(arr[0]);
insertsort(arr,len);
for(int i=0;i<len;i++){
printf("%d ",arr[i]);
}
return 0;
}

下面是代码详解