写一函数,用选择法对输入的10个字符按从小到大顺序排列. 实在不会写,麻烦大家帮帮忙!

#include "stdio.h"
char func(char a[10])
{
int i,j,t;
for(i=0;i<9;i++)
for(j=i+1;j<9;j++)
if(a[i]>a[j+1])
{
t=a[i];a[i]=a[j+1];
a[j+1]=t;
}
for(i=0;i<9;i++)
printf("%2c",a[i]);
printf("\n");
return func(a[10]);
}
main()
{
char b[10];
func(b[10]);
}

#include<stdio.h>

void sort(char *a)                            //排序

{

int i,j,x;

char c;


for(i=0;i<9;i++)

{


for(j=i+1,x=i;j<10;j++)                        //找出a[i]及其后面字符中最小的;

{

if(a[x]>a[j]) x=j;

}


if(x!=i) {c=a[i];a[i]=a[x];a[x]=c;}           //如果a[i]不是最小的,将a[i]与找到的最小字符交换

}

}



int main()

{

char a[10],*p=a;

int i;

printf("输入10个字符(以空格分隔):\n");

for(i=0;i<10;i++)                                                                  //输入

{

scanf("%c",&a[i]);

if(i<9) getchar();

}


sort(p);


printf("排序后的10个字符:\n");                     //输出

for(i=0;i<10;i++)

printf("%c ",a[i]);

return 0;

}


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-20

 

这才是选择排序,你上面的是冒泡排序

#include "stdio.h"

void  func(char a[10])

 {

 int i,j,t,k;

 for(i=0;i<8;i++)

 {

  k=i;

  for(j=i+1;j<9;j++)

   if(a[j]<a[k])

    k=j;

   if(k!=i)

   {

    t=a[i];

    a[i]=a[k];

    a[k]=t;

   }

 }

  

}

main()

{

 char b[10]={'a','a','c','d','a','a','a','a','d','d'};

 int i;

 func(b);

  for(i=0;i<9;i++)

   printf("%2c",b[i]);

   printf("\n");

}

追问

能行!但是为什么我写成func(b[10])就不行,二func(b)就行?

追答

数组传值,只要传递数组首地址,b[10] 是b数组的首地址吗

追问

嗯。谢谢。但是我用的却是是选择法,不信你再瞧瞧,只是我自己摸索出来的。

本回答被提问者和网友采纳
第2个回答  2013-06-20
楼主稍等。