c#實(shí)現(xiàn)選擇排序的示例
1.工作原理(算法思路)
- 給定一個(gè)待排序數(shù)組,找到數(shù)組中最小的那個(gè)元素
- 如果最小元素不是待排序數(shù)組的第一個(gè)元素,則將其和第一個(gè)元素互換
- 在剩下的元素中,重復(fù)1、2過(guò)程,直到排序完成。
2.動(dòng)圖演示
3.C#代碼實(shí)現(xiàn)
根據(jù)原理設(shè)計(jì)算法:
class Program { //選擇排序法 private static void chooseSort(int[] array) { //第一個(gè)for循環(huán):每一次循環(huán)完成后得到的當(dāng)前的最大元素都與第i位做交換 for (int i = 0; i < array.Length; i++) { //min為最小元素的索引 int min = i; //第二個(gè)for循環(huán):將當(dāng)前的array[j]與array[min]作比較,如果array[j]更小,則替換min的當(dāng)前索引 for (int j = i + 1; j < array.Length; j++) { if (array[min] > array[j]) { min = j; } } //當(dāng)?shù)诙€(gè)for循環(huán)完成時(shí),array[min]中存儲(chǔ)的就是當(dāng)前最小元素 //將array[min]與array[i]交換 int temp = array[i]; array[i] = array[min]; array[min] = temp; } } //打印輸出數(shù)組 private static void printArray(int[] array) { foreach (int item in array) { Console.Write(item + "\t"); } Console.WriteLine(); } static void Main(string[] args) { int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; printArray(array); chooseSort(array); printArray(array); Console.ReadKey(); } }
輸出結(jié)果
4.性能分析
1)復(fù)雜度
2)選擇排序法特點(diǎn)
- 執(zhí)行的比較和交換次數(shù)
比較: N*(N-1)/2
交換: N
- 運(yùn)行時(shí)間與輸入無(wú)關(guān)
在每一次的for循環(huán)結(jié)束后并不能為下一次的循環(huán)提供有效信息。這種性質(zhì)在某些時(shí)候是一種缺陷。在數(shù)組大小相同時(shí),當(dāng)一個(gè)幾乎已經(jīng)有序的數(shù)組使用選擇排序法花費(fèi)的時(shí)間和無(wú)序數(shù)組所花費(fèi)的時(shí)間是一致的。
- 數(shù)據(jù)的移動(dòng)量最少
交換的次數(shù)和數(shù)組的大小呈線(xiàn)性關(guān)系,其他的排序算法對(duì)數(shù)據(jù)移動(dòng)量都是線(xiàn)性對(duì)數(shù)級(jí)別或平方級(jí)別的。
以上就是c#實(shí)現(xiàn)選擇排序的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 選擇排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
.Net WInform開(kāi)發(fā)筆記(五)關(guān)于事件Event
我前面幾篇博客中提到過(guò).net中的事件與Windows事件的區(qū)別,本文討論的是前者,也就是我們代碼中經(jīng)常用到的Event,感興趣的朋友可以了解下2013-01-01C#入門(mén)之窗體的簡(jiǎn)單用法實(shí)例
這篇文章主要介紹了C#入門(mén)之窗體的簡(jiǎn)單用法,以實(shí)例形式分析了注冊(cè)頁(yè)面程序的實(shí)現(xiàn)過(guò)程,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12C#使用LINQ中Enumerable類(lèi)方法的延遲與立即執(zhí)行的控制
這篇文章主要介紹了C#的LINQ查詢(xún)中Enumerable類(lèi)方法的延遲與立即執(zhí)行,LINQ語(yǔ)言集成查詢(xún)可以讓C#和VB以查詢(xún)數(shù)據(jù)庫(kù)相同的方式操作內(nèi)存數(shù)據(jù),需要的朋友可以參考下2016-03-03在C#中處理時(shí)間戳和時(shí)區(qū)的解決方法
處理時(shí)間戳和不同的時(shí)區(qū)可能是軟件開(kāi)發(fā)中的一個(gè)棘手問(wèn)題,尤其是當(dāng)系統(tǒng)不確定給定的日期時(shí)間是UTC還是本地時(shí)間時(shí),通常會(huì)遇到與時(shí)間轉(zhuǎn)換相關(guān)的問(wèn)題,在這篇文章中,我將分享我們?nèi)绾卧贑#中處理時(shí)間戳和時(shí)區(qū),需要的朋友可以參考下2024-06-06C#正則表達(dá)式匹配HTML中的圖片路徑,圖片地址代碼
最近的項(xiàng)目中有個(gè)關(guān)于網(wǎng)頁(yè)取圖的功能需要我自己開(kāi)發(fā),那就是用正則表達(dá)式來(lái)匹配圖片標(biāo)簽,這里簡(jiǎn)單介紹下實(shí)現(xiàn)方法,需要的朋友可以參考下2013-12-12C#實(shí)現(xiàn)動(dòng)態(tài)生成靜態(tài)頁(yè)面的類(lèi)詳解
這篇文章主要介紹了C#實(shí)現(xiàn)動(dòng)態(tài)生成靜態(tài)頁(yè)面的類(lèi),結(jié)合實(shí)例形式詳細(xì)分析了C#動(dòng)態(tài)生成靜態(tài)頁(yè)面的原理與相關(guān)使用技巧,需要的朋友可以參考下2016-04-04深入理解C#中new、override、virtual關(guān)鍵字的區(qū)別
下面小編就為大家?guī)?lái)一篇深入理解C#中new、override、virtual關(guān)鍵字的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作示例
這篇文章主要介紹了C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了C#針對(duì)base64編碼與圖片的相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2017-06-06