[英]Sorting an array with alternate smallest-largest values
給定一個數組,我需要對其進行排序,第一個元素是最小值,第二個元素是最大的,第三個元素是第二個最小的元素,依此類推。
但是我的代碼只是打印原始數組,我不知道為什么。 任何意見,將不勝感激。
#include <stdio.h>
void swap(int m, int n);
int main()
{
int i,j,A[10],n;
printf ("enter the number of array elements\n");
scanf ("%d", &n);
for (i=0;i<n;i++){
scanf ("%d", &A[i]);
}
for (i=0;i<n;i++){
if (i%2 == 0){
for (j=i;j<n;j++){
if (A[j] < A[i]){
swap(A[i],A[j]);
}
}
}
else if (i%2 != 0){
for (j=i;j<n;j++){
if (A[j] > A[i]){
swap (A[i],A[j]);
}
}
}
}
for(i=0;i<n;i++){
printf ("%d\n", A[i]);
}
return 0;
}
void swap( int m, int n)
{
int temp;
temp = m;
m = n;
n = temp;
}
您需要使用指針通過引用傳遞。
void swap( int *m, int *n)
{
int temp;
temp = *m;
*m = *n;
*n = temp;
}
並更改您的代碼以這樣調用它
swap (&A[i],&A[j]);
對於不使用指針的解決方案,您可以使用這樣的 MACRO;
#define swap(x,y) do{int t=(x);(x)=(y);(y)=t;}while(0);
swap(A[i],A[j]);
只需在文件頂部定義它並刪除交換函數和原型。 這都是關於范圍的,因為 MACRO 只是一個文本替換它在正確的范圍內使用 A[i]。
我在你的程序中注意到的第一個問題是你的交換函數。 在您的交換函數中,您的參數是原始數據類型。 因此,該函數創建整數“m”和“n”的副本,並在函數swap
的范圍內切換值。 但是一旦函數返回,你就沒有真正交換任何東西。 要實際交換您在 main 中創建的數組中的值,您需要通過引用進行傳遞(傳遞指向您嘗試交換的變量的指針)。 像這樣修改你的交換函數:
void swap( int *m, int *n)
{
int temp;
temp = *m;
*m = *n;
*n = temp;
}
然后在您的 main 中,使用&
運算符(address of)傳入數組中該值的地址。 下面是一個例子: swap (&A[i],&A[j]);
其他建議:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.