您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C#如何實現(xiàn)選擇排序”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#如何實現(xiàn)選擇排序”吧!
選擇排序是一種低效的排序算法,大致過程是:遍歷數(shù)組的每一個元素,先假設0號位置上的元素是最小的,并把0號索引賦值給一個表示最小元素索引的變量,比如說是smallest,再遍歷0號位置以后的元素,一旦發(fā)現(xiàn)有比0號位置元素更小的元素,就把該元素的索引賦值給smallest,繼續(xù)遍歷,最終把0號位置以后最小元素的索引賦值給了smallest變量,再把0號位置和smallest位置上的元素互換,這樣,在0號位置上放上了最小元素。接著,在1號位置放上倒數(shù)第二小的元素,在2號位置放上倒數(shù)第三小的元素......以此類推,最終得到一個升序排列的數(shù)組。由于是依次循環(huán)遍歷數(shù)組元素,個人更愿意把選擇排序理解成線性排序。
自定義一個類,里面維護著一個int[]類型數(shù)組,通過構造函數(shù)定義數(shù)組長度并初始化,并提供了打印和選擇排序的相關方法。
public class MyArray { private static int[] arr; private static Random r = new Random(); public MyArray(int size) { arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = r.Next(1, 100); } } //選擇排序算法 public void Sort() { int smallest; //最小元素的索引 //最后一個索引位置不需要遍歷,因為在代碼段的內(nèi)部循環(huán)中包含了對最后一個索引位置的處理 for (int i = 0; i < arr.Length - 1; i++) { //把當前遍歷的元素的索引賦值給smallest,即假設當前遍歷的數(shù)組元素為最小元素 smallest = i; //遍歷當前遍歷元素后面的所有元素 //獲取最小元素的索引 for (int index = i + 1; index < arr.Length; index++) { if (arr[index] < arr[smallest]) { smallest = index; } } //把當前遍歷元素和最小元素交換位置 Swap(i, smallest); //每次排完序打印 Print(); } } //交換2個位置上的元素 public void Swap(int first, int second) { int temp = arr[first]; arr[first] = arr[second]; arr[second] = temp; } //打印數(shù)組元素 public void Print() { foreach (var item in arr) { Console.Write(item + " "); } Console.WriteLine("\n"); } }
客戶端調(diào)用。
class Program { static void Main(string[] args) { MyArray myArray = new MyArray(8); Console.Write("排序前: "); myArray.Print(); Console.WriteLine("排序后: "); myArray.Sort(); Console.ReadKey(); } }
可見,對選擇排序來說,外部循環(huán)進行了n-1次迭代,內(nèi)部循環(huán)第一次進行了n-1迭代,第二次進行了n-2次迭代……以時間復雜度來說,忽略小項和常數(shù)項,選擇排序基本上是一個平方階,寫成O(n²)。
到此,相信大家對“C#如何實現(xiàn)選擇排序”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。