有两处错误:
1:s[i]-->s[max]
2:第二段代码,应该是在第二重循环执行完之后。
不理解可以追问
#include "stdio.h"//#include <stdlib.h>//#include <time.h>//void Selectsort(int *p){ int i,j,k for(i=0i<10i++){k=i for(j=k+1j<10j++)if(*(p+k)<*(p+j)) k=j j=*(p+i) *(p+i)=*(p+k) *(p+k)=j }} void main(void){int a[10],i srand((unsigned)time(NULL)) for(i=0i<10*(a+i++)=rand())Selectsort(a) for(i=0i<10i++)//打出来看看.printf("%d ",a[i]) printf("\n")}#include "stdio.h"#define MAX 10
void sort(int *p,int n)
{int i,j
int temp//记录每一轮比较中最大值
int maxindex//记录每一轮比较中最大值的下标
for (i=0i<ni++)
{
temp=p[i]
maxindex=i
for (j=i+1j<nj++)
if (temp<p[j]) {temp=p[j]maxindex=j}
if(maxindex!=i){p[maxindex]=p[i]p[i]=temp}
}
}
/*
void sort(int *p)
{int i,j,k
for (i=0i<9i++)
for (j=i+1j<10j++)
if (p[i]<p[j]) {k=p[i]p[i]=p[j]p[j]=k}
这个是简单选择排序,但是执行效率没有上面的高。不过对于比较小的基数,还是看不出来效率的优劣,如果在基数上百万时,效率高的执行时间将节省不少。
*/
main()
{
int a[MAX],i
for (i=0i<MAXi++)
scanf("%d",&a[i])
sort(a,MAX)
for(i=0i<MAXi++)
printf("%d ,",a[i])
}