C#實現(xiàn)選擇排序
選擇排序是一種低效的排序算法,大致過程是:遍歷數(shù)組的每一個元素,先假設(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ù)組,通過構(gòu)造函數(shù)定義數(shù)組長度并初始化,并提供了打印和選擇排序的相關(guān)方法。
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++)
{
//把當(dāng)前遍歷的元素的索引賦值給smallest,即假設(shè)當(dāng)前遍歷的數(shù)組元素為最小元素
smallest = i;
//遍歷當(dāng)前遍歷元素后面的所有元素
//獲取最小元素的索引
for (int index = i + 1; index < arr.Length; index++)
{
if (arr[index] < arr[smallest])
{
smallest = index;
}
}
//把當(dāng)前遍歷元素和最小元素交換位置
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次迭代……以時間復(fù)雜度來說,忽略小項和常數(shù)項,選擇排序基本上是一個平方階,寫成O(n²)。
到此這篇關(guān)于C#實現(xiàn)選擇排序的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用C#實現(xiàn)Windows組和用戶管理的示例代碼
這篇文章主要介紹了使用C#實現(xiàn)Windows組和用戶管理的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01
C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題
C#動態(tài)生成PictureBox并綁定右鍵菜單,實現(xiàn)刪除圖片2009-05-05
詳解如何利用C#實現(xiàn)漢字轉(zhuǎn)拼音功能
這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)漢字轉(zhuǎn)拼音的功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
C# 當(dāng)前系統(tǒng)時間獲取及時間格式詳解
這篇文章主要介紹了C# 當(dāng)前系統(tǒng)時間獲取及時間格式詳解的相關(guān)資料,這里提供代碼實例,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-12-12
UGUI實現(xiàn)隨意調(diào)整Text中的字體間距
這篇文章主要為大家詳細介紹了UGUI實現(xiàn)隨意調(diào)整字體間距的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03

