C语言 谁能讲解一下选择排序法以及有效排序。

 我来答
梁丘玉蓉渠雁
2019-09-21 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:35%
帮助的人:1069万
展开全部
1、直接选择排序的基本思想
 
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为r[1..n],有序区为空。
②第1趟排序

 在无序区r[1..n]中选出关键字最小的记录r[k],将它与无序区的第1个记录r[1]交换,使r[1..1]和r[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
  ……
③第i趟排序
  第i趟排序开始时,当前有序区和无序区分别为r[1..i-1]和r[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录r[k],将它与无序区的第1个记录r[i]交换,使r[1..i]和r[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

 这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
直接选择排序的具体算法如下:
 void
selectsort(seqlist
r)
 {

int
i,j,k;

for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)

k=i;

for(j=i+1;j<=n;j++)
//在当前无序区r[i..n]中选key最小的记录r[k]

if(r[j].key<r[k].key)

k=j;
//k记下目前找到的最小关键字所在的位置

if(k!=i){
//交换r[i]和r[k]

r[0]=r[i];r[i]=r[k];r[k]=r[0];
//r[0]作暂存单元

}
//endif

}
//endfor

}
//seleetsort
席其英邝昭
2019-11-05 · TA获得超过3.7万个赞
知道小有建树答主
回答量:1.4万
采纳率:25%
帮助的人:893万
展开全部
用[4,1,3,2]作例子吧
(1)找出最小的元素-----(4,1),即用4和1比较,是有效排序,比较结果是1比较小,因此1再和3,2比较,(1,3),(1,2)这两次比较就不是有效比较了(1在3,2前面且比它们小)
因此第一轮排序为[1,4,3,2]
最小元素和第一个元素互换
(2)在剩余序列中继续找最小的元素(即排除了1)-----(4,3)比较,是有效排序。3比较小,因此3再和2比较,(3,2)是有效排序。找出最小的元素2。
第二轮排序为[1,2,3,4]
2和第二个元素4互换
(3)依次类推,(3,4)不是有效排序了。
因此,最后结果为[1,2,3,4]
有效排序为(4,1)
(4,3)
(3,2)
程序这东西要自己想,况且这个应该挺容易想出来的。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式