族谱网 头条 人物百科

选择排序

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:338
转发:0
评论:0
实作范例C语言voidselection_sort(intarr[],intlen){inti,j,min,temp;for(i=0;i<len-1;i++){min=i;for(j=i+1;j

实作范例

C语言

voidselection_sort(intarr[],intlen){inti,j,min,temp;for(i=0;i<len-1;i++){min=i;for(j=i+1;jarr[j])min=j;temp=arr[min];arr[min]=arr[i];arr[i]=temp;}}

C++

template//整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能voidselection_sort(std::vector&arr){for(inti=0;i<arr.size()-1;i++){intmin=i;for(intj=i+1;j<arr.size();j++)if(arr[j]<arr[min])min=j;std::swap(arr[i],arr[min]);}}

C#

staticvoidselection_sort(T[]arr)whereT:System.IComparable{//整數或浮點數皆可使用inti,j,min,len=arr.Length;Ttemp;for(i=0;i<len-1;i++){min=i;for(j=i+1;j0)min=j;temp=arr[min];arr[min]=arr[i];arr[i]=temp;}}

VB.net

Python

defselection_sort(L):N=len(L)exchanges_count=0foriinrange(N-1):min_index=iforjinrange(i+1,N):ifL[min_index]>L[j]:min_index=jifmin_index!=i:L[min_index],L[i]=L[i],L[min_index]exchanges_count+=1print("iteration #{}: {}".format(i,L))print("Total {} swappings".format(exchanges_count))returnLtestlist=[17,23,20,14,12,25,1,20,81,14,11,12]print("Before selection sort: {}".format(testlist))print("After selection sort: {}".format(selection_sort(testlist)))

Java

publicstaticvoidselection_sort(int[]arr){inti,j,min,temp,len=arr.length;for(i=0;i<len-1;i++){min=i;//未排序序列中最小数据数组下标for(j=i+1;jarr[j]){min=j;}temp=arr[min];//将最小元素放到已排序序列的末尾arr[min]=arr[i];arr[i]=temp;}}

JavaScript

Array.prototype.selection_sort=function(){vari,j,min;vartemp;for(i=0;i<this.length-1;i++){min=i;for(j=i+1;jthis[j])min=j;temp=this[min];this[min]=this[i];this[i]=temp;}};

PHP

functionswap(&$x,&$y){$t=$x;$x=$y;$y=$t;}functionselection_sort(&$arr){//php的陣列視為基本型別,所以必須用傳參考才能修改原陣列for($i=0;$i<count($arr)-1;$i++){$min=$i;for($j=$i+1;$j$arr[$j])$min=$j;swap($arr[$min],$arr[$i]);}}

GO

// SelectSort 选择排序, data必须实现sort包中的Interface接口funcSelectSort(datasort.Interface){fori:=0;i<data.Len()-1;i++{// 假定首元素为最小元素min:=iforj:=min+1;j<data.Len();j++{ifdata.Less(j,min){min=j}}// 将此次筛选出的最小元素放入最左边data.Swap(min,i)}}

复杂度分析

选择排序的 交换操作 介于 0 {\displaystyle 0} 和 ( n − − --> 1 ) {\displaystyle (n-1)} 次之间。选择排序的 比较操作 为 n ( n − − --> 1 ) / 2 {\displaystyle n(n-1)/2} 次之间。选择排序的 赋值操作 介于 0 {\displaystyle 0} 和 3 ( n − − --> 1 ) {\displaystyle 3(n-1)} 次之间。

比较次数 O ( n 2 ) {\displaystyle O(n^{2})} ,比较次数与关键字的初始状态无关,总的比较次数 N = ( n − − --> 1 ) + ( n − − --> 2 ) + . . . + 1 = n × × --> ( n − − --> 1 ) / 2 {\displaystyle N=(n-1)+(n-2)+...+1=n\times (n-1)/2} 。交换次数 O ( n ) {\displaystyle O(n)} ,最好情况是,已经有序,交换0次;最坏情况是,逆序,交换 n − − --> 1 {\displaystyle n-1} 次。交换次数比冒泡排序较少,由于交换所需CPU时间比比较所需的CPU时间多, n {\displaystyle n} 值较小时,选择排序比冒泡排序快。

原地操作几乎是选择排序的唯一优点,当空间复杂度要求较高时,可以考虑选择排序;实际适用的场合非常罕见。


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 排序算法
分类在计算机科学所使用的排序算法通常被分类为:计算的时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(nlogn),且坏的性能是O(n)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(nlogn)。内存使用量(以及其他电脑资源的使用)稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。依据排序的方法:插入、交换、选择、合并等等。稳定性当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。在这个状况下,有可能产生两种不同的结果,一个是让相等键值的纪录维持相对的次序,而另外一个则没有:不稳定排序算法可能会在相等...
· 字辈排序
福建石狮上官氏字辈:自上官栋至今相传十世,由十四世“堂”字基字辈起,循五行相生例,土生金,故十五世有锡锱锦镇等字;一辈金生水,故十六世有“治济源鸿澜洵永泮润涖洪溢”等字;一辈水生木,十七世有“标木桂林相柱权荣集树乐杰松椿杏”等字;一辈至十八世应从木生火之例,因十二世为辈系属火部,未便循照旧例今议定。自十八世以起,照谱内所刻十字按世次命名以昭书一若,二十八世以后字辈承祖法之流,长看人文之迭起,后有作者再行编定虽百世可知也。议定十八世以起,字辈诗例十字留后:“继志声名振传家道德隆”。一议定十字诗例字单,诚恐族姓繁衍限于一字为辈,则上字同而下一字难免不同,俟长成而更改之多所未便。如继字辈从系部旁,则以“绍绳缵组纪”等字。用至于“志”字概从心字部,以“应思宪志忠意惠”等字代用,余可类推。“若”声字以下,难以预定,触类而旁通之可也。江西奉新上官氏字辈:“奇兆鼎昌奕世杨恢宏先德振辉光英贤秀毓山川瑞俊彦...
· 字辈排序
广东南雄麦氏字辈:良智世兆天万惟宏崇有孟嗣康守成(开始应文昌正再守通永)广东鹤山麦氏字辈:愈宏受命成昌钻裘奕世德业荣光广东南海冲霞南乡大石麦村字辈:茂宰宣宏景惟德永华昌本厚远必达广东南海冲霞北乡海口麦村字辈:超弼智仁成敦和宜永兄锡光常绍德广大启文明.善作传家宝财为用世荣尚源开景福士进显朝庭.广东省中山市小榄镇永宁乡沙垄村麦氏字辈联:德茂文升朝作辅恭仁武烈孝惟诚广东阳江麦氏字辈:耀祖荣宗长庆兰芳桂馥崇儒重道常来凤起蛟腾广东湛江麦氏字辈(必达公分支):明朝正德年间,麦铁杖第廿三世孙麦道清在广东省吴川县落地生根,有三个儿子:麦邦实、麦邦美、麦邦杰,後来枝叶繁茂,人口向遂溪、廉江、雷州、徐闻、海南、北海等地迁移。麦道清的子孙在湛江地区约有三万人,已经传了二十几代。在1985年到1987年,遂溪县吴家村(吾家村)麦秀叙修编《麦氏族谱》,为各个兄弟房派订立字辈长房邦实公的子孙分布在廉江、吴川、遂溪,从...
· 快速排序
算法快速排序采用“分而治之、各个击破”的观念,此为原地(In-place)分区版本。快速排序使用分治法(Divideandconquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:从数列中挑出一个元素,称为"基准"(pivot),重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。在简单的伪代码中,此算法可以被表示为:原地(in-place)分区的版本上面简单版本的缺点是,它需要...
· 施氏备份排序
施氏备份排序功德汪施氏备份排序从一氏到十一氏无证可考,但从名字上可以看出先祖在辈份的排序上特别讲究字义字德,具有鲜明特点。如一氏弟兄四个,名字都用一个字:顺、强、江、全;二氏两字,用“万”字辈:万保、万财、万银;三氏用单字:然、爱;四氏用双字,“德”字辈;五氏德富后弟兄三个,用单字:孝、忠、信;庆秀后用单字:洪、庭、聚、满;六氏用双字,第二个字都带“秀”:英秀、俊秀、文秀、武秀、双秀、全秀;也有用“景”字的:景仁、景贤、景和、景清;七氏用单字,并且每字都带“水”字旁;八氏用双字“成”字辈;九氏用双字'天“字辈;十氏用双字”贵"字辈;十一氏用双字“有”字辈。到十二氏,在大清咸丰三年,即癸丑年(公元1853年),功德汪村施、郝两姓特请武安县万安村科甲进士郝本裕为郝、施两姓分别立了二十个字的辈份排序。施氏辈份排序的二十个字是:清元逢立发,平安谋可兴。真谦克增奉,赞来用本荣。2002年施氏重修家谱...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信