写了一个选择排序函数,开始使用加减法交换两个数,但是排序结果最后两个数变成了0,后来使用临时变量交换两个数,排序结果是正确的。为什么使用加减法交换两个数的结果会是错的?是加减法交换两个数有什么bug吗?
void Select_Sort(int *arr,int length)
{
int max;
for (int i = 0; i < length-1; i++) {
max=0;
for (int j = 1; j < length-i; j++) {
if (arr[j] > arr[max]) {
max=j;
}
}
// int temp=arr[max];
// arr[max]=arr[length-1-i];
// arr[length-1-i]=temp;
arr[max]=arr[max]+arr[length-1-i];
arr[length-1-i]=arr[max]-arr[length-1-i];
arr[max]=arr[max]-arr[length-1-i];
}
}
int main()
{
int arr[6]={2,34,1,0,65,90};
Select_Sort(arr,6);
for(int i=0;i<6;i++)
printf("%d ",arr[i]);
return 0;
}
第一个是加减法交换得到的结果,第二个是使用temp临时变量交换得到的结果