#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;
}
这才是选择排序,你上面的是冒泡排序
#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数组的首地址吗
追问嗯。谢谢。但是我用的却是是选择法,不信你再瞧瞧,只是我自己摸索出来的。
本回答被提问者和网友采纳