c语言的排序问题,排序的函数为何拍不了序。

排序的代码哪里有问题


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,查找交换的次数应该是随着每一次操作减少的,而不是固定的