2017-06-19 86 views
-1

我创建一个气泡使用for用C分拣程序,我试图当一个数比另一种此阵列中更高,他们将要改变的地方。如何更改C中数组中两个数的位置?

实施例:

用户与输入进入:

Input : 5,6,10,9,2 

输出将在第一位置的最高数量,并且在一个序列中的其他人,像:

Output : 10,9,6,5,2 

我的代码:

int array[5],i,changed = false; 

for(i = 0; i < 5; i++) { 
    if(array[i] > array[i+1]) { 
     swap(array[i],array[i+1]); //Function that exchanges place, but I don't know how to do that 
     changed = true; 
    } 
} 

我如何能做到这一点的作品?用C

+0

好的,我会看看这个问题,如果没有工作,我会改变我的问题。 – Monteiro

+0

顺便说一句'数组[i + 1]'可能会出现越界。 – BLUEPIXY

+0

@OldProgrammer我在回答之前搜索重复,我只发现类似但不重复,你的问题确实是重复的,但很难理解,因为你的重复应该接近于简单的错字错误。 – Stargateur

回答

1

参数功能都是通的副本,所以你需要使用指针:

void swap(int *a, int *b) { 
    int save_a = *a; 
    *a = *b; 
    *b = save_a; 
} 

然后,你可以使用此功能是这样的:

swap(&array[i], &array[i + 1]); 

或:

swap(array + i, array + i + 1); 
+0

他错了交换,因为这些值与输入中的数字不匹配。他只显示一个值,其他显示为0,我该如何纠正? – Monteiro

+0

@Monteiro什么?你的问题是关于交换两个价值。我的回答给你一种交换方式。就像BLUEPIXY说的那样,你的代码是未定义的行为,因为你有一个超出界限的索引。你的泡泡排序被破坏了,但这不是你问题的目的。我邀请您搜索如何编写冒泡排序。 – Stargateur

+0

你是对的@Stargateur,给你+1并回答正确,抱歉说这个,无论如何,谢谢你的帮助。 – Monteiro