查詢與排序03,選擇排序

2021-09-07 22:35:36 字數 1269 閱讀 1024

選擇排序是一種低效的排序演算法,大致過程是:遍歷陣列的每乙個元素,先假設0號位置上的元素是最小的,並把0號索引賦值給乙個表示最小元素索引的變數,比如說是smallest,再遍歷0號位置以後的元素,一旦發現有比0號位置元素更小的元素,就把該元素的索引賦值給smallest,繼續遍歷,最終把0號位置以後最小元素的索引賦值給了smallest變數,再把0號位置和smallest位置上的元素互換,這樣,在0號位置上放上了最小元素。接著,在1號位置放上倒數第二小的元素,在2號位置放上倒數第三小的元素......以此類推,最終得到乙個公升序排列的陣列。由於是依次迴圈遍歷陣列元素,個人更願意把選擇排序理解成線性排序。

自定義乙個類,裡面維護著乙個int型別陣列,通過建構函式定義陣列長度並初始化,並提供了列印和選擇排序的相關方法。

public

class myarray

}
//選擇排序演算法
public

void sort()

}
//把當前遍歷元素和最小元素交換位置
swap(i, smallest);
//每次排完序列印
print();
}
}
//交換2個位置上的元素
public

void swap(int first, int second)

//列印陣列元素
public

void print()

console.writeline("\n");
}
}
客戶端呼叫。

可見,對選擇排序來說,外部迴圈進行了n-1次迭代,內部迴圈第一次進行了n-1迭代,第二次進行了n-2次迭代……以時間複雜度來說,忽略小項和常數項,選擇排序基本上是乙個平方階,寫成o(n²)。

「查詢與排序」系列包括:

演算法 03 選擇排序

選擇排序 selection sort 和插入排序類似,插入排序將無序放在有序中去排列,而選擇排序則是在無序中選擇有序,去擴大有序。顧名思義,就是在無序區中,每次選擇最大 最小 放在排列好的最大 最小 中。同樣可以用巢狀for 來解決。for i 0 i i for j i 1 j j for i ...

選擇排序 直接選擇排序與堆排序

選擇排序即每次從待排序的數列中選擇乙個最小的元素,然後把它放在已排好序列的最前面 假定這裡從小到大排序 直至序列完全有序。選擇排序分為線性結構的直接選擇排序與非線性的堆排序,後者是用相當於把樹的元素存在陣列中,通過元素下標來區分孩子結點與父親結點等等 1.直接選擇排序 直接上 void select...

排序 氣泡排序與選擇排序

最近複習大學學過的演算法,這裡做個筆記。排序,我們學過 這裡需要了解什麼是時間複雜度,什麼是空間複雜度。簡單而言,時間複雜度指執行的次數,空間複雜度指消耗的記憶體。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地...