猿问

C语言算法设计,选择排序?

C语言算法设计,选择排序


qq_花开花谢_0
浏览 517回答 1
1回答

ITMISS

排序如下:void&nbsp;SelectSort(RecordType&nbsp;r[],&nbsp;int&nbsp;length) /*对记录数组r做简单选择排序,length为待排序记录的个数*/{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;i=0&nbsp;;&nbsp;i<&nbsp;length-1&nbsp;;&nbsp;i++)&nbsp;//n-1趟排序&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;index=i; //假设index处对应的数组元素是最小的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j=i+1&nbsp;;&nbsp;j&nbsp;<&nbsp;length&nbsp;;&nbsp;j++)&nbsp; //查找最小记录的位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(r[j].key&nbsp;<&nbsp;r[index].key&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index=j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;index!=i)&nbsp; //若无序区第一个元素不是无序区中最小元素,则进行交换&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;r[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;r[index];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[index]&nbsp;=&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}}初始序列:{49 27 65 97 76 12 38}第1趟:12与49交换:12{27 65 97 76 49 38}第2趟:27不动 :12 27{65 97 76 49 38}第3趟:65与38交换:12 27 38{97 76 49 65}第4趟:97与49交换:12 27 38 49{76 97 65}第5趟:76与65交换:12 27 38 49 65{97 76}第6趟:97与76交换:12 27 38 49 65 76 97 完成选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。拓展资料下面也写个例子:由大到小时:int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a[10];&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,j,t,k;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i&nbsp;++&nbsp;)&nbsp;scanf("%d",&a[&nbsp;i&nbsp;]);&nbsp;/*输入10个数,比武报名,报名费用10000¥&nbsp;^_^*/&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;i&nbsp;<&nbsp;9;i&nbsp;++&nbsp;)&nbsp;/*10个数,所以只需比9次*/&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;i;&nbsp;/*裁判AND记者实时追踪报道比赛情况*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1;&nbsp;j&nbsp;<&nbsp;10;&nbsp;j&nbsp;++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;a[&nbsp;k&nbsp;]&nbsp;<&nbsp;a[&nbsp;j&nbsp;]&nbsp;)&nbsp;k&nbsp;=&nbsp;j;&nbsp;/*使a[k]始终表示已比较的数中的最大数*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(k!=i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;a[&nbsp;i&nbsp;];&nbsp;a[&nbsp;i&nbsp;]&nbsp;=&nbsp;a[&nbsp;k&nbsp;];&nbsp;a[&nbsp;k&nbsp;]&nbsp;=&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;/*&nbsp;t&nbsp;发放奖品*&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i&nbsp;++)&nbsp;printf("%4d",a[&nbsp;i&nbsp;]);&nbsp;/*显示排序后的结果*/&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}由小到大时:int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a[10];&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,j,t,k;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i&nbsp;++&nbsp;)&nbsp;scanf("%d",&a[&nbsp;i&nbsp;]);&nbsp;/*输入10个数,比武报名,报名费用10000¥&nbsp;^_^*/&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;9;&nbsp;i&nbsp;++&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;i;&nbsp;/*裁判AND记者实时追踪报道比赛情况*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1;&nbsp;j&nbsp;<&nbsp;10;&nbsp;j&nbsp;++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;a[&nbsp;k&nbsp;]&nbsp;>&nbsp;a[&nbsp;j&nbsp;]&nbsp;)&nbsp;k&nbsp;=&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(k!=i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;a[&nbsp;i&nbsp;];&nbsp;a[&nbsp;i&nbsp;]&nbsp;=&nbsp;a[&nbsp;k&nbsp;];&nbsp;a[&nbsp;k&nbsp;]&nbsp;=&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}/*&nbsp;t&nbsp;发放奖品*/&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i<=&nbsp;9;&nbsp;i&nbsp;++)&nbsp;printf("%4d",a[&nbsp;i&nbsp;]);&nbsp;/*显示排序后的结果*/return&nbsp;0;}
随时随地看视频慕课网APP
我要回答