#函数中使用了指针,编写完后,输出还是没有排序,请懂得人帮我看看,谢谢!
#include <stdio.h>
#define size 5
void rank(double a,int n);
int main()
{
double a[]={2,3,4,0,8} ;
int i;
rank(a,size);
for(i=0;i<size;i++)
printf("%f ",a[i]);
return 0;
}
void rank(double *a,int n)
{
int i,j;
double t;
for(i=0;*(a+i)<*(a+n);i++){
for(j=0;*(a+j)<*(a+n-i-1);j++){
if(*(a+i)>(a+j)){
t=*(a+i);
(a+j)=(a+i);
*(a+i)=t;
}
}
}
}
改成这样就可以了
#include <stdio.h>
#define size 5
void rank(double* a, int n);
int main()
{
double a[] = { 2,3,4,0,8 };
int i;
rank(a, size);
for (i = 0; i < size; i++)
printf("%f ", a[i]);
return 0;
}
void rank(double* a, int n)
{
int i, j;
double t;
for (i = 0; i<n; i++) {
for (j = 0; j<n; j++) {
if (*(a + i) > *(a + j)) {
t = *(a + j);
*(a + j) = *(a + i);
*(a + i) = t;
}
}
}
}
主要是for循环书写时和交换时的一些处理错误(改正的地方已在代码中标出)
改正如下:
#include <stdio.h>
#define size 5
void rank(double *a,int n);
int main()
{
double a[]={2,3,4,0,8} ;
int i;
rank(a,size);
for(i=0;i<size;i++)
printf("%f ",a[i]);
return 0;
}
void rank(double *a,int n)
{
int i,j;
double t;
for(i = 0;i < n;i++){//改正 1
for(j = 0;j < n;j++){//改正 2
if(*(a+i)>*(a+j)){
t=*(a+j);//改正 2
*(a+j)=*(a+i);
*(a+i)=t;
}
}
}
}
运行结果如图: