c语言用指针写选择法排序函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言用指针写选择法排序函数相关的知识,希望对你有一定的参考价值。

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个数依次比较 次大数放至第二个 以次类推 实现由大到小的排列
请问上面的程序有何问题
回答请指出上面程序的问题及可以如何改正
不要光写个程序在那没有说明的 我是初学者 谢谢
谢谢 可我的程序无法得到正确的结果 请问有什么问题?

你的程序没错,只不过这不是选择法,是冒泡发,选择发如下:
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();
参考技术A #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;

看看我做的,也是十个数;
看来你也是用的冒泡法,这不是选择法。
选择法我也不会。
参考技术B 你的程序没错,只不过这不是选择法,是冒泡发,选择发如下:
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();

c语言编程题 利用指针编写函数用选择法对整数数组排序(降序)。 求大神帮忙啊!!!谢谢

#include<stdio.h>

void Sort(int *a,int n) 
int *p,*q,*v,t;
for(p = a;p < a + n - 1;++p) 
v = p;
for(q = p + 1; q < a + n; ++q)
if(*v > *q) v = q;
if(*p != *v) 
t = *p;
*p = *v;
*v = t;





void Show(int *a,int n) 
int i;
for(i = 0; i < n; ++i)
printf("%d ",*(a + i));
printf("\\n");


int main() 
int a[] = 23,12,54,89,66,59,57,48,91,20,31;
int n = sizeof(a)/sizeof(a[0]);
printf("排序前:\\n");
Show(a,n);
printf("排序后:\\n");
Sort(a,n);
Show(a,n);
return 0;

参考技术A #include <iostream>
using namespace std;
int sort(int *a, int num)

int temp;
for(int i = 0; i < (num-1); i++)

if(a[i]>a[i+1])

temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;


return 0;

int main()

int num;
printf("请输入数组中整数个数:\n");
scanf("%d",&num);
int a[num];
sort(a,num);
return 0;

本回答被提问者采纳

以上是关于c语言用指针写选择法排序函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言指针选择法排序问题

c语言编程题 利用指针编写函数用选择法对整数数组排序(降序)。 求大神帮忙啊!!!谢谢

C语言使用指针实现选择法排序。

C语言选择排序法

C语言:用选择法对10个整数排序

C语言1.用选择法对10个整数排序。10个整数用scanf函数输入。