好久不撸算法一塌糊涂,直接上代码
重点在于arr[j + 1] = arr[j]; 我总写的是arr[i] = arr[j]
实际上他并不止一次大小判断,如果两次大小判断之后,arr[i]最大的值就会被改变
所以这里使用的是arr[j+1] = arr[j],最后当j = -1 走到了数组头的时候结束,
把temp的值赋值给arr[j+1]
//直接插入排序
void InsertSort() {
int arr[] = { 95,64,25,13,57,64,152 };
//数组的长度 这个代码就不用解释了吧
int len = sizeof(arr) / sizeof(arr[0]);
//内层需要判断的值
int j;
// 数组只有一个元素时就是有序数组,毕竟他就一个,所以我们从1开始
for (int i = 1; i < len; i++)
{
//首先将边界值保存下来
int temp = arr[i];
for (j = i - 1;j >= 0 ;j--)
{
//判断边界值是否小于前一个数 j
if (temp < arr[j])
{
//条件为真 啧直接覆盖,arr[i]的值是被temp保存下来了
arr[j + 1] = arr[j];
}
else {
//如果在有序数组中不小于,那么久说明他是比有序数组中的最后一个值大的,就不需要比较了
break;
}
}
//这里怎么解释呢。。当上面循环结束 要么是j < 0了 所以我们需要j+1 要么就是有序了 不需要排序了
arr[j + 1] = temp;
}
for (int t = 0; t < len; t++)
{
printf("%d ", arr[t]);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容