冒泡排序升序运行失败

ddasdw

img

请问为什么"<"可以正常运行,改成">"运行就弹出这个:

img

因为你最后一项是数字5,5的后面其实放着\0,当你循环到最后判断(5<0)的时候,这个时候会判断5是否小于0,当满足条件的时候会进行两个数字的交换,但可惜这个条件不成立,所以不交换,不会越界访问,所以可以运行,这就是你说的为啥<可以运行,但是当条件是(5>0)的时候,很明显这个条件是满足的,所以要进行两个数字的交换,这个时候就会越界访问第11个元素,这个时候超出你数组的范围,导致报错,如果有用的话,望采纳,谢谢


for(i=0;i<9;i++)
  for(j=0;j<9-i;j++)

你的代码中,当j=9时,arr[j+1]就是arr[10],越界了
当改为大于时,由于j=9时,if条件满足,导致数据交换,由于arr[10]越界,所以导致非法数据写入而崩溃

该回答内容部分引用GPT,GPT_Pro更好的解决问题
这是因为冒泡排序是一种比较数据大小的算法,它会比较相邻的两个元素,根据大小关系进行交换。如果使用“<”来进行比较,则表示从小到大排序,也就是升序;而如果使用“>”来进行比较,则表示从大到小排序,也就是降序。如果将冒泡排序用于降序时,那么它会出现失败的情况,因为它不能正确地对数据进行排序。

举个例子来说明一下:假设有一个数组[10, 5, 4, 9, 8],如果使用升序冒泡排序(即使用“<”进行比较),那么在第一轮循环中,10会与5比较,5会与4比较,9会与8比较;结果发现5小于10、4小于5、8小于9,就会对其进行交换位置。最后得到的数组就是[5, 4, 8, 9, 10],这已经是一个有序的升序数组。

而如果使用降序冒泡排序(即使用“>”进行比较),那么在第一轮循环中,10会与5进行比较,5会与4进行比较,9会与8进行比较。但是由于5大于10、4大于5、8大于9都不成立,所以不会对其进行交换位置。最后得到的数组就是[10, 5, 4, 9, 8],显然它仍然是一个无序的数组。

所以我们可以看出:要想使用冒泡排序正常运行并正确地对数据进行升/降序排序,就要根据要实现的目标选取正确的大小关系运算符“<”或“>”。
如果回答有帮助,望采纳。