c语言用指针写选择法排序函数
voidsort(int*a,intn){inti,j,temp;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(*(a+i)<*(a+j)...
void sort(int *a,int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(*(a+i)<*(a+j))
{temp=*(a+i);*(a+i)=*(a+j);*(a+j)=temp;}
}
main()
{
int i,a[10],*p=a;
printf("input zhe array a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe sort array is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
用选择法对数组a[10]实现由大到小排序
即第一个数先于后面N-1个数依次比较 第一轮将最大的数放到第一个
然后第2个数再与后面N-2个数依次比较 次大数放至第二个 以次类推 实现由大到小的排列
请问上面的程序有何问题
回答请指出上面程序的问题及可以如何改正
不要光写个程序在那没有说明的 我是初学者 谢谢
谢谢 可我的程序无法得到正确的结果 请问有什么问题? 展开
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(*(a+i)<*(a+j))
{temp=*(a+i);*(a+i)=*(a+j);*(a+j)=temp;}
}
main()
{
int i,a[10],*p=a;
printf("input zhe array a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe sort array is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
用选择法对数组a[10]实现由大到小排序
即第一个数先于后面N-1个数依次比较 第一轮将最大的数放到第一个
然后第2个数再与后面N-2个数依次比较 次大数放至第二个 以次类推 实现由大到小的排列
请问上面的程序有何问题
回答请指出上面程序的问题及可以如何改正
不要光写个程序在那没有说明的 我是初学者 谢谢
谢谢 可我的程序无法得到正确的结果 请问有什么问题? 展开
3个回答
展开全部
你的程序没错,只不过这不是选择法,是冒泡发,选择发如下:
void sort(int *a,int n)
{
int i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定义t为未排序数的第一个
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑选出更大的数的位置,把他赋给t
t=j;
}
temp=*(a+i); /t是最大的那个数的位置,把他和未排序的第一个交换位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int i,a[10],*p=a;
printf("input zhe array a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe sort array is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
void sort(int *a,int n)
{
int i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定义t为未排序数的第一个
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑选出更大的数的位置,把他赋给t
t=j;
}
temp=*(a+i); /t是最大的那个数的位置,把他和未排序的第一个交换位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int i,a[10],*p=a;
printf("input zhe array a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe sort array is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
展开全部
#include <stdio.h>
int main()
{
int a[10],tmp,i,j;
printf("Enter everybody's score:\n");
for(i=0;i<10;i++){
scanf("%i",&a[i]);
}
for(i=0;i<10;i++){
for(j=i;j<10;j++)
if(a[i]<a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
printf("The score range from high to low is \n");
for(i=0;i<10;i++){
printf("%i\n",a[i]);
}
getch();
return 0;
}
看看我做的,也是十个数;
看来你也是用的冒泡法,这不是选择法。
选择法我也不会。
int main()
{
int a[10],tmp,i,j;
printf("Enter everybody's score:\n");
for(i=0;i<10;i++){
scanf("%i",&a[i]);
}
for(i=0;i<10;i++){
for(j=i;j<10;j++)
if(a[i]<a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
printf("The score range from high to low is \n");
for(i=0;i<10;i++){
printf("%i\n",a[i]);
}
getch();
return 0;
}
看看我做的,也是十个数;
看来你也是用的冒泡法,这不是选择法。
选择法我也不会。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的程序没错,只不过这不是选择法,是冒泡发,选择发如下:
void
sort(int
*a,int
n)
{
int
i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定义t为未排序数的第一个
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑选出更大的数的位置,把他赋给t
t=j;
}
temp=*(a+i);
/t是最大的那个数的位置,把他和未排序的第一个交换位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int
i,a[10],*p=a;
printf("input
zhe
array
a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe
sort
array
is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
void
sort(int
*a,int
n)
{
int
i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定义t为未排序数的第一个
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑选出更大的数的位置,把他赋给t
t=j;
}
temp=*(a+i);
/t是最大的那个数的位置,把他和未排序的第一个交换位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int
i,a[10],*p=a;
printf("input
zhe
array
a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe
sort
array
is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询