冒泡排序:python
冒泡排序是經典排序算法之一,時間複雜度爲O(n2),基本原理以下列程序註釋:算法
python實現:數組
# 冒泡排序 # 一次比較兩個元素,重複走訪 # 數列中最大的數會在屢次比較後直接挪到最後,下次比較時不參與 # 由於越小的元素會慢慢'浮'到數列頂端,因此叫作冒泡排序 # 例程
def bubblesort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j]
c實現:網站
void bubble_sort(int arr[], int len) { int i, j, temp; for(i=0;i<len-1;i++) for (j = 0; j < len - 1 - i; j++) if(arr[j]>arr[j+1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
對比兩程序可知,其都是經過兩級for循環實現冒泡排序功能。在python中,簡化了變量的聲明,而且經過a,b=b,a直接互換了數組成員。spa
插入排序:code
(通常按照最壞時間複雜度討論) 時間複雜度爲O(n2)。經過c例程,看看它的實現方法。blog
首先將 arr[1] 存放在temp中,接着進入下一個for循環中,這時,若是 arr[j-1],即 arr[0] 大於temp, arr[0] 中的元素就被放在 arr[1] 中,而以前的 arr[1] 中的元素就被放入了 arr[0] 中。簡單歸納:arr[1]與前面的數組元素進行了比較,大的被放在了後面。小的放在了前面。排序
然後,第二個for循環到來,這時,i=2,這時咱們不難看出,在 for (j = i; j > 0 && arr[j - 1] > temp; j--) 這個循環中,arr[2] (temp)依次與前面的元素進行比較,若是前面的元素大於 temp , 前面的元素就會向後移動一次,若是前面的元素小於 temp,temp就排在這個元素的後方,這就是「插入」排序的核心意思。(查找圖片資料更容易理解,這裏略去)教程
c實現圖片
//插入排序:對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入 void insertion_sort(int arr[], int len) { int i, j, temp; for (i = 1; i < len; i++) { temp = arr[i]; for (j = i; j > 0 && arr[j - 1] > temp; j--) arr[j] = arr[j - 1]; arr[j] = temp; } }
python實現
# 插入排序 def insertionSort(arr): for i in range(1, len(arr)): key = arr[i] j = i-1 while j >= 0 and key < arr[j]: arr[j+1] = arr[j] j -= 1 arr[j+1] = key
選擇排序:
時間複雜度O(n2)。算法實現:首先在全部數組元素中找到最小值,並放在最前方,而後再去掉已排序的最小值數組元素,接着找剩餘元素的最小值(即「選擇最小值」),放在前方,直到全部元素排序完成。
c實現:
//選擇排序 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void selection_sort(int arr[], int len) { int i, j; for (i = 0; i < len - 1; i++) { int min = i; for (j = i + 1; j < len; j++) //走訪未排序程序 { if (arr[min] > arr[j]) min = j; //記錄未排序的數的最小值位置 } swap(&arr[i], &arr[min]); //最小值與arr[i]作交換 } }
python實現:
# 選擇排序 # 指定一個元素 # 依次比較,將最小的元素放在第一個 # 而後繼續比較剩下的元素,直至完成排序 # 例程 def seletesort(A): for i in range(len(A)): min_id = i for j in range(i+1, len(A)): if A[min_id] > A[j]: min_id = j # 將i號位與min_id號位的值調換(實際上a,b=b,a是調換了二者的地址) A[i], A[min_id] = A[min_id], A[i]
(部分程序思路參考菜鳥教程官方網站完成)