排序之直接插入排序

好久不撸算法一塌糊涂,直接上代码

重点在于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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容