學習回顧演算法(選擇排序)

2021-08-11 02:07:20 字數 1208 閱讀 7640

選擇排序比氣泡排序演算法時間上要優秀一點,主要在於冒泡演算法每次比較都要交換位置,而選擇排序通過記錄最大或最下位置的索引,最後只交換一次位置就可以了。

選擇排序演算法原理

每一次從待排序的元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,知道全部待排序的資料排完。

例子:

待排序的初始序列為:49、38、65、97、49、13、27、76

排序過程如下

演算法分析

(1)時間複雜度

如果各個元素的初始狀態是正序的,一次掃瞄即可完成排序,所需比較的次數c和記錄移動次數m都達到了最小值.c=n-1,m=0。這時候氣泡排序最好的時間複雜度為o(n)。

如果各個元素是反序的,需要進行n-1此排序。每次排序要進行n-i次元素值的比較(1<=i<=n-1),且每次比較都需要移動記錄三次來達到交換位置。這種情況下,比較和移動次數達到最大值: m=n*(n-1)/2, c == m.

綜上,氣泡排序的平均時間複雜度是o(n^2)。

(2)空間複雜度

氣泡排序在排序過程中只需要乙個臨時變數進行兩個元素兩兩交換,所需要的額外空間為1,因此空間複雜度為o(1)。

(3)穩定性

由於選擇排序每次都會將待排序元素列表中最小或最大的元素和排序列表交換。所以選擇排序是一種不穩定的排序。

1、golang實現

package main

import (

"fmt"

)func selectsort(values int)

}values[i], values[mixindex] = values[mixindex], values[i]

}}func main()

fmt.println(values)

selectsort(values)

fmt.println(values)

return

}

結果

[49

3865

9749

1327

76][13

2738

4949

6576

97]

桶排序 氣泡排序 選擇排序 快速排序回顧

第一次了解桶排序的時候,是在c語言課本的乙個題目。題目大概意思是要將三萬個學生的成績進行排名,分數從0分到100分。桶排序的時間複雜度時o m n 所以就可以申請乙個大小為100的為int型別的陣列,然後將陣列初始化為0,再將陣列的下標看作為分數,把陣列元素中儲存的數值對應著獲得該分數的人數,這樣分...

排序演算法學習系列 選擇排序

選擇排序是最簡單直觀的一種演算法,基本思想為每一趟從待排序的資料元素中選擇最小 或最大 的乙個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序,平均時間複雜度為o n 2 o n 2 o n2 主要思路 在演算法實現時,每一趟確定最小元素的時候會通過不斷地比較交換來使得首位置為當前最小...

演算法快速回顧 排序演算法

常用排序演算法有以下幾種 氣泡排序 插入排序 快速排序 歸併排序 堆排序。本文將對五種常用演算法分析並實現。交換兩個元素的值 這裡列出幾種不同寫法 void swap int a,int b void swap int a,int b void swap int a,int b 氣泡排序 原理 比較...