我的目的是要找到最大值最小值,用指针的话,为啥这样写输出答案不对
因为10是最大值,在第一个,你的max指针指向arr,但由于你先交换最小值,导致10被交换到数组中最小值1的位置啦。你再交换max时,arr第一个元素不是啦。
这里你要先判断一下,如果max和arr相同,你在交换完min后,实际上最大值已经被交换到min指向的位置,所以最大值交换应该是min和arr+n-1,而不是max和arr-n-1
因为你的max和min都是指针
你记录的不是最大值和最小值,而是最大值和最小值的位置
只是这样本来也无所谓,反正最后输出max和min就行了
但是你在ss的最后,又执行了2个swap,就出问题了
你先把a[0]和min交换,把1放到了a[0]的位置,而10跑到了a[3]的位置
然后再把a[4]和max交换,而max是指向a[0]的,相当于把a[0]和a[4]做了交换
看了你的程序,没看懂你这样写的意义是什么。。。
如果想要知道数组的最大、最小值,那么for 循环就已经知道了,循环结束就可以直接printf 。。。
如果你想要通过数组的第 0 个和第max 个知道,那么for 循环中进行排序就好,因为你的时间复杂度已经是O(n) 了。
int i, *p;
for (i = 0; i < n - 2; ++i) {
if (p[i] > p[i+1]) {
swap(p + i, p + i + 1);
}
}
最开始学习C 语言的时候,可能不好把握算法和时间复杂度,在动笔之前简单的设计下,画个流程图可以帮助你更好的编程~~~
希望对你有所帮助,若有其他问题,欢迎私信交流~~