【发布时间】:2016-07-13 15:43:06
【问题描述】:
给定一个数组,我需要对它进行排序,第一个元素是最小值,第二个元素是最大的,第三个元素是第二小的元素,依此类推。
但是我的代码只是打印了原始数组,我不知道为什么。任何建议将不胜感激。
#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;
}
【问题讨论】:
-
如果您想要内联就地交换,试试这个:
A[i] ^= A[j] ^= A[i];并完全消除交换功能。您也可以为此使用宏。 -
void swap(int A[], int i, int j);也可以。致电swap(A,i,j)。 -
@Quirk:不好的建议。使用交换函数使代码更具可读性,并且异或链也不太直观,并且在现代代码中没有任何优势,并且对于优化不佳的编译器可能不太有效。
-
@Olaf:同意。但是 OP 不想与指针有任何关系。按值传递整个数组也不是一个好习惯。异或交换是在宏下进行高效交换的一种很好的方式。
-
@Quirk:对于大多数用途(以及对其元素的所有访问),数组衰减为指针。没有什么可争论的,只需阅读标准即可。在 C 中学习指针 after 数组只是简单的坏教法。