1. 程式人生 > >排序演算法之python簡單選擇排序

排序演算法之python簡單選擇排序

簡單選擇排序

介紹:

    簡單選擇排序是一種選擇排序。每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止

思想:

選擇排序思想很簡單,就是每次從待排序列中找出關鍵字最小的元素,放入已經排好的序列中,本質上就是第一次在後面選出最小的元素就是最終序列的第一小元素,第二次在後面選出的最小元素就是最終序列的第二小元素,如此重複,直到待排序列為空。其實這個排序有點類似於氣泡排序,氣泡排序是每一趟都把最大的往後移,即確定一個第幾大的元素;而簡單選擇排序是每一趟都是把小的往前挪,確定一個第幾小的元素。

程式碼:

def SelectSort(input_list):
	l = len(input_list)
	if l == 0:
		return []
	sorted_list = input_list
	for i in range(l):
		#預設第i個元素是每次的最小值的索引
		min_index = i
		#找到後面元素最小的索引
		for j in range(i+1,l):
			if sorted_list[min_index] >sorted_list[j]:
				min_index = j
		#將找到的最小元素放入前面已經有序序列的末尾
		temp = sorted_list[i]
		sorted_list[i] = sorted_list[min_index]
		sorted_list[min_index] = temp
		print("%dth"%(i+1))
		print(sorted_list)
	return sorted_list
			
	
	
		
if __name__ == '__main__':
	input_list = [50,123,543,187,49,30,0,2,11,100]
	print("input_list:")
	print(input_list)
	sorted_list = SelectSort(input_list)
	print("sorted_list:")
	print(input_list)
	

結果:

input_list:
[50, 123, 543, 187, 49, 30, 0, 2, 11, 100]
1th
[0, 123, 543, 187, 49, 30, 50, 2, 11, 100]
2th
[0, 2, 543, 187, 49, 30, 50, 123, 11, 100]
3th
[0, 2, 11, 187, 49, 30, 50, 123, 543, 100]
4th
[0, 2, 11, 30, 49, 187, 50, 123, 543, 100]
5th
[0, 2, 11, 30, 49, 187, 50, 123, 543, 100]
6th
[0, 2, 11, 30, 49, 50, 187, 123, 543, 100]
7th
[0, 2, 11, 30, 49, 50, 100, 123, 543, 187]
8th
[0, 2, 11, 30, 49, 50, 100, 123, 543, 187]
9th
[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]
10th
[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]
sorted_list:
[0, 2, 11, 30, 49, 50, 100, 123, 187, 543]

分析:

1.演算法效能

2.時間複雜度

簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數總是N (N - 1) / 2。而移動次數與序列的初始排序有關。當序列正序時,移動次數最少為 0;當序列反序時,移動次數最多,為3N (N - 1) /  2。所以,簡單排序的時間複雜度為 O(N^2)。

3、空間複雜度

需要一個臨時變數儲存最小索引,O(1)

3.演算法穩定性

不穩定,例如待排序列為{5,2,5',1},第一次將5作為初始最小元素,遇到5'就把5'與5的位置對換了,故該演算法是不穩定的。

相關推薦

排序演算法python簡單選擇排序

簡單選擇排序 介紹:     簡單選擇排序是一種選擇排序。每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止 思想: 選擇排序思想很簡單,就是每次從待排序列中找出關鍵字最小的元素,放入已經排好的序列中,本質上就是第一次在後面選

八大排序演算法簡單選擇排序(c語言)

選擇排序—簡單選擇排序(Simple Selection Sort) 基本思想: 在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元

排序演算法(三):簡單選擇排序(Simple Selection Sort)

基本思想: 在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後一個數)比較為止。 簡單選擇排序的示例: 操作方法: 第一趟,從n

排序演算法2——圖解簡單選擇排序及其實現

排序演算法1——圖解氣泡排序及其實現(三種方法,基於模板及函式指標) 排序演算法2——圖解簡單選擇排序及其實現 排序演算法3——圖解直接插入排序以及折半(二分)插入排序及其實現 排序演算法4——圖解希爾排序及其實現 排序演算法5——圖解堆排序及其實現 排序演算法6——圖解歸併排序及其遞迴與非

排序演算法冒泡、選擇、快速、插入

基本資料型別的賦值過程:值傳遞(傳遞的是值得拷貝) 資料交換的三種形式: 不需要第三方變數 a = a+b  b = a-b    a = a-b 引用第三方變數  temp = a  a = b  b = tem

【S-排序python實現八大排序演算法4-希爾排序ShellSort

希爾排序ShellSort 起源: 直接插入法的改進演算法。希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算

排序演算法python排序

堆排序 介紹:     堆排序也是一種選擇排序。每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。跟簡單選擇排序不同的是待排序的待排序列是利用二叉樹這種資料結構儲存的。相比之下是更優化的。 思想: 首先,要介紹一下堆。堆是一

排序演算法c語言描述---選擇排序

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

排序演算法六:基數排序

演算法分析:(radixsort)則是屬於“分配式排序”(distribution sort),基數排序法又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用,基數排序法是屬於穩定性的排。 基數排序(R

java排序演算法(三)------選擇排序

選擇排序 基本思想:每一趟從待排序的資料元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。 選擇排序的時間複雜度和空間複雜度分別為 O(n2 ) 和 O(1) 程式碼實現: public static void s

java排序演算法(二)----選擇排序

選擇排序(Selection Sort)  選擇排序(Selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從

Java排序演算法二分法插入排序

二、二分插入排序 package demosort; /* * * 基本思想:二分法插入排序的思想和直接插入一樣,只是找合適的插入位置的方式不同, * 這裡是按二分法找到合適的位置,可以減少比較的次數。 */ public class hal

排序演算法(六)——選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序演算法。選擇排序的交換操作介於和次之間。選擇排序的比較操作為次。選擇排序的賦值操作介於和次之間。 運作方式如下: 1.首先從原始陣列中選擇最小的1個數據,將其和位於第1個位置的資料交換。 2.接著從剩下的n-1個數據中選擇次小的

排序演算法(一)選擇排序和氣泡排序

1. 選擇排序: 選擇排序是一種很簡單直觀的排序方法,就是在未排序的資料中挑選出最大或者最小的元素,存放到已排序資料的末尾。 簡單的講,就是每次都把最大或者最小的資料挑選出來,然後依次組成新的序列。 假設有資料{1,4,6,8,3,4,0,2,14},要按照從大到小進行

排序演算法(二)——選擇排序及改進

選擇排序 基本思想 氣泡排序中有一個缺點,比如,我們比較第一個數a1與第二個數a2的時候,只要a1比a2大就會交換位置,但是我們並不能確定a2是最小的元素,假如後面還有比它更小的,該元素還會與a2

排序演算法--選擇排序簡單選擇排序

在待排序記錄中,選擇一個最小的數,和第一個記錄交換位置,在剩下n-1個的記錄中選擇最小的和第二個記錄交換,依次類推,最終可以得到一個有序的序列。 程式碼: #include <string.h> #include <malloc.h> #includ

演算法學習選擇排序演算法python實現

  ——參考自《演算法圖解》 1 def findSmallest(arr): 2 # 假設第一個元素最小 3 smallest = arr[0] 4 smallest_index = 0 5 for i in range(1,len(arr)): 6

常用內部排序演算法四:簡單選擇排序、直接插入排序和氣泡排序

前言 之所以把這三類演算法放在一塊,是因為除此之外的演算法都是在這三類演算法的基礎上進行優化的。簡單選擇排序的思想是每一趟n−i+1(i=1,2,...,n−1)個記錄中選擇最小的記錄作為有序序列的第i個記錄。直接插入排序的思想是將一個記錄插入到已經排好序的有

python排序演算法 選擇、冒泡、插入排序

1.選擇排序      給定一個列表,一趟遍歷記錄最小的數,放到第一個位置,再一趟遍歷記錄剩餘列表中最小的數,繼續放置……     1.每趟選出一個最小的,得到其索引,然後把該值和該趟的起始值作交換     該趟最小值在確定的位置,每趟比上一趟比較的資料少一個,資料從前減少

簡單排序演算法簡單選擇排序和直接插入排序

簡單選擇排序簡述: 簡單選擇排序(Simple Selection Sort)可以說是氣泡排序的一種改版,它不再兩兩比較出較小數就進行交換,而是每次遍歷比較當前數的後面所有數,最後再把最小的數和當前數