排序的代码哪里有问题
void paixu(int a[],int n){
int i,j;
int temp;
for (i=0;i<n-1;i++){
for (j=1;j<n;j++){
if (a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
完整代码:
#include <stdio.h>
#define NUMBER 5
void paixu(int a[],int n){
int i,j;
int temp;
for (i=0;i<n-1;i++){
for (j=1;j<n;j++){
if (a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
int main(void)
{
int h[NUMBER];
int i;
for (i=0;i<NUMBER;i++){
printf("%d号学生:",i+1); scanf("%d",&h[i]);
}
paixu(h,NUMBER);
puts("升序排列");
for(i=0;i<NUMBER;i++)
printf("%d号学生:%d\n",i+1,h[i]);
return 0;
}
你所用的排序应该是冒泡排序,你的第二个循环有问题,应该改成:
for (j=0;j<n-i-1;j++){
if (a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
因为你传入的是数组,不是指针
所以函数里面的数组确实排序了,但是那只是形参,跟实参无关
你这个是冒泡排序么,是的话应该写错了,j的初始值应该是0,范围应该是n-i-1,查找交换的次数应该是随着每一次操作减少的,而不是固定的