c语言 选择法排序

#include"Stdio.h"voidmain(){voidsa(intarray[],intn);intarray[10],i;printf("enterthear... #include "Stdio.h"

void main()
{
void sa(int array[],int n);
int array[10],i;
printf("enter the array:\n");
for(i=0;i<10;i++)
scanf("%d",&array[i]);
sa(array,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d\t",array[i]);
getch();

}

void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
temp=array[k];
array[k]=array[i];
array[i]=temp;
}
}
能不能帮忙把25到31行写一下注释,看不明白
展开
 我来答
柠檬小黄宇
推荐于2019-07-30 · TA获得超过903个赞
知道答主
回答量:73
采纳率:100%
帮助的人:49.4万
展开全部
void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j<n;j++) //将第i个元素后面的元素与第i个元素进行比较
if(array[j]<array[k]) //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号, 这样就将最小元素的标号放到最前面
k=j; //交换标号
temp=array[k]; //循环结束后,交换两个标号下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
这个程序实现的是由小到大的排序。第二个循环里面,就是i号元素后面最小的元素对应的标号放到k中,在交换当前元素与k号元素中的值,实现由大到小排序
加QQ351890267
2011-07-16 · TA获得超过197个赞
知道答主
回答量:553
采纳率:0%
帮助的人:233万
展开全部
选择法的算法:
假设需要对10个数进行排序,那么首先找出10个数里面的最小数,并和这个10个数的第一个(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大)..

依次类推,当还剩两个数时,选出两个数的最小者放在第9个位置(下标8),于是就只剩下一个数了。这个数已经在最后一位(下标9),不用再选择了。所以10个数排序,一共需要选择9次(n个数排序就需要选择n-1次)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
武珈蓝许PM
2018-03-30 · TA获得超过1.6万个赞
知道小有建树答主
回答量:115
采纳率:100%
帮助的人:1.7万
展开全部

void sa(int array[],int n)

{

int i,j,k,temp;

for(i=0;i<10;i++)

{

k=i;                 //保存i的值,用k来进行循环排序

for(j=i+1;j<n;j++)         //将第i个元素后面的元素与第i个元素进行比较

if(array[j]<array[k])   //如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号,                            这样就将最小元素的标号放到最前面

k=j;                //交换标号

temp=array[k];          //循环结束后,交换两个标号下的元素的值

array[k]=array[i];

array[i]=temp;

}

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友75a7067e45a
2012-12-10 · TA获得超过134个赞
知道答主
回答量:38
采纳率:75%
帮助的人:15.5万
展开全部
#include<stdio.h>
#define N 6
void main()
{ int a[N]={2,4,6,5,9,8},i,j,t;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(a[i]<a[j])
{t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<=N-1;i++)
printf("%d",a[i]);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网络世界
2011-07-17 · 网络热点,科普知识
网络世界
采纳数:174 获赞数:1328

向TA提问 私信TA
展开全部
以整形数组元素为例,有数组A[10](以C语言为例描述),即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。
首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。
接下来从A[1],…,A[9]中找出最小的元素,将其与A[0]交换。
然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。
一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。
以下为一个用C描述的函数实现上述排序:
void sort(int array[],int n)
{ // n 为数组元素个数
int i,j,k,temp; // i 为基准位置,j 为当前被扫描元素位置,k 用于暂存出现的较小的元素的位置
for(i=0;i<n-1;i++)
{k=i;//初始化为基准位置
for(j=i+1;j<n;j++)
{
if (array[j]<array[k]) k=j ; // k 始终指示出现的较小的元素的位置
} //for
if(k!=i)
{ temp=array[i];
array[i]=array[k];
array[k]=temp; // 将此趟扫描得到的最小元素与基准互换位置
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式