问题描述
- C语言选择法排序函数的实现问题
-
我在看C语言程序设计是遇到一个问题,用选择法对数组中的5个整数按由小到大排序
#include
int main()
{
void sort(int array[],int n);
int a[5],i;
printf("Please input 5 numbers:n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
sort(a,5);
printf("the sort array:n");
for(i=0;i<5;i++)
printf("%dt",a[i]);
printf("n");
return 0;
}
这段代码没什么问题,主要是里面这个sort函数
这是书中给定的
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}而我自己写的少了一个变量k,就不能实现这个功能了,不知道为什么
void sort(int array[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{for(j=i+1;j<n;j++) if(array[j]<array[i]) t=array[j]; array[j]=array[i]; array[i]=t; }
}
解决方案
选择排序,k是用来记录所选数据的下标。
数组中的5个整数按由小到大排序:第一次遍历就是找到5个数中最小的,k记录的就是这个数的下标
解决方案二:
不知道说的是什么啊,看不懂
解决方案三:
少了两个花括号,改为:
void sort(int array[],int n)
{
int i,j,t = 0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(array[j]<array[i])
{
t=array[j];
array[j]=array[i];
array[i]=t;
}
}
}
}
时间: 2024-10-30 16:49:02