我的代码:(我希望它按照升序对数组进行排序)。
void sort( int arr[], int n) {
int c=0;
for(int i = 0; i<n-1; ++i) {
if (arr[i]>arr[i+1]) {
c=arr[i];
arr[i]=arr[i+1];
arr[i]=c;
i=0;
}
}
}
示例数组:int arr[4]={3,1,2,4};
sort(arr,4);
错误:无限循环???
答案 0 :(得分:4)
用于交换数组中两个连续元素的代码是错误的。将if语句中的前三行替换为:
c = arr[i];
arr[i] = arr[i+1];
arr[i+1] = c;
最后一行是我修复过的。
此算法称为bubble sort。
编辑:确保正确排序需要做的另一件事是在if语句末尾将i
设置为-1
而不是0
。如果你只是将它设置为0,那么在循环的下一次迭代中它将增加并变为1,这意味着你的代码将不会考虑交换循环的前两个元素。 (感谢Anton Savin的评论。)