选择法排序:输入一个正整数n,再输入n个整数,将它们从大到小排序

#include<stdio.h>
int main(void)
{
int a[10],n,i,k,max,temp;
scanf("%d",&n);
printf("enter n integers:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(k=0;i<n-1;k++)
{
max=k;
for(i=k+1;i<n;i++)
if(a[i]>a[max])
{ max=i;
temp=a[max];
a[max]=a[k];
a[k]=temp;
}
}
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}
为什么输出结果没有改变,哪里错了?请给解答谢谢

#include<stdio.h>
int main(void)
{
    int a[10],n,i,k,max,temp;

    scanf("%d",&n);
    printf("enter n integers:");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(k=0;k<n-1;k++) ////条件写成i了!
    {
        max=k;
        for(i=k+1;i<n;i++)
            if(a[i]>a[max])
                max=i;
        if( max!=k ) //先选择出最大的位置,循环结束后再交换
        {
            temp=a[max];
            a[max]=a[k];
            a[k]=temp;
        }
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-01
#include<stdio.h>
int main(void)
{
    int a[10], n, i, k, t;
    scanf("%d", &n);

    printf("enter n integers:");
    for(i = 0; i < n; i++)  scanf("%d", &a[i]); 

    for(k = 0; k < n - 1; k++) 
      for(i = k + 1; i < n; i++)
        if(a[k] < a[i])  {
          t = a[k];  a[k] = a[i];  a[i] = t;
        }

    for(i = 0; i < n; i++)  printf("%d ", a[i]);
    printf("\n");

    return  0;
}


其实,楼主的程序,略有些繁杂。

简化一些,既能实现功能,又能便于查错。

相似回答