基本思想
每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。
回顧和簡介
在介紹選擇排序演算法前,我們再回顧下冒泡演算法。
冒泡演算法是通過兩兩比較,不斷交換,逐個推進的方式,來進行排序的。一次遍歷,得到乙個最值。
冒泡演算法最費時的是什麼?
一是兩兩比較
一是兩兩交換, 交換要比比較費時多了。
冒泡演算法兩兩交換的目的是什麼?-------找出最值。
而通過這種方式取得最值得代價是很大的,因為,每次遍歷,可能需要很多次交換才能找到最值,而這些交換都是很浪費時間的。
如果能減少交換次數,同時又能取得最值,那麼這就是一種改進。
求最值,需要比較,但不一定非得通過不斷推進的方式。
那如何能更好的求得最值呢?
很自然的一種想法便是:
每次遍歷,只選擇最值元素進行交換,這樣一次遍歷,只需進行一次交換即可,從而避免了其它無價值的交換操作。
如何求得最值元素所在位置呢?
這還得通過遍歷比較。
具體方法為:
遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置
這樣一次遍歷,只需一次交換,便可將最值放置到合適位置
這便是 簡單選擇排序演算法。
@theme:選擇排序
3@author:codingmengmeng
4@date:2016-11-10 09:56:52
5@email:[email protected]*/
7 #include 8
using
namespace
std;
910 template
11void selectsort(t data, int
len)
1230
//交換
31if (nindex !=i)
3237}38
39}4041
int main(void)42
執行結果:
總結
從選擇排序的思想或者上面的**中,不難看出,演算法的時間複雜度為o(n*n),氣泡排序的時間複雜度也是o(n*n),但選擇排序相比於氣泡排序,一次遍歷只需要進行一次交換,減少了交換次數,因此,選擇排序在同等條件下,會略快於氣泡排序。
排序演算法(四) java實現歸選擇排序
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。直接是雙重迴圈,第乙個迴圈從第乙個元素開...
排序演算法 選擇排序
private static int leftchild int i private static void perc int a,int i,int n for int i 0 ir j break else public static void heasp int r,int n for i 0...
排序演算法 選擇排序
摘自 wiki百科 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾 目前已被排序的序列 以此類推,直到所有元素均排序完畢。c語言實現 vo...