排序演算法(四)選擇排序

2021-09-08 04:22:09 字數 1613 閱讀 7770

基本思想

每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。

回顧和簡介

在介紹選擇排序演算法前,我們再回顧下冒泡演算法。

冒泡演算法是通過兩兩比較,不斷交換,逐個推進的方式,來進行排序的。一次遍歷,得到乙個最值。

冒泡演算法最費時的是什麼? 

一是兩兩比較

一是兩兩交換, 交換要比比較費時多了。

冒泡演算法兩兩交換的目的是什麼?-------找出最值。

而通過這種方式取得最值得代價是很大的,因為,每次遍歷,可能需要很多次交換才能找到最值,而這些交換都是很浪費時間的。

如果能減少交換次數,同時又能取得最值,那麼這就是一種改進。

求最值,需要比較,但不一定非得通過不斷推進的方式。

那如何能更好的求得最值呢?

很自然的一種想法便是:

每次遍歷,只選擇最值元素進行交換,這樣一次遍歷,只需進行一次交換即可,從而避免了其它無價值的交換操作。

如何求得最值元素所在位置呢?

這還得通過遍歷比較

具體方法為:

遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置

這樣一次遍歷,只需一次交換,便可將最值放置到合適位置

這便是 簡單選擇排序演算法。

@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...