标签:
选择排序/单元排序(Selection Sort)
def selSort(L): for i in range(len(L) - 1): print L minIndx = i minVal= L[i] j = i + 1 while j < len(L): if minVal > L[j]: minIndx = j minVal= L[j] j = j + 1 temp = L[i] L[i] = L[minIndx] L[minIndx] = temp
原理:
设列表里的第一个元素为最小数,依次向后比较。若小于第二个元素,则继续和第三个元素比较。当第一个元素大于与之比较的元素时,则使该元素替代第一个元素作为最小数,继续向后比较。遇见大数则继续,遇见小数则被小数替代,直到列表最后。将列表里作为最小数的元素和第一个元素交互位置,即最小数的元素排到了第一位。从第二个元素开始重复以上步骤,第三个元素,第四个元素...每一次循环都会找出剩下的元素里最小的那个排列到前端。
示例:
对列表 [3,4,7,2,5,1] 进行排序
[3,4,7,2,5,1]
从第1个元素开始。3为最小数。3比4小,继续;3比7小,继续;3比2大,2作为最小数;2比5小,继续;2比1大,1作为最小数;比较结束。交换1和3的位置。
[1,4,7,2,5,3]
从第2个元素开始。4为最小数。4比7小,继续;4比2大,2作为最小数;2比5小,继续;2比3小,比较结束。交换2和4的位置。
[1,2,7,4,5,3]
从第3个元素开始。7为最小数。7比4大,4作为最小数;4比5小,继续;4比3大,3作为最小数,比较结束。交换3和7的位置。
[1,2,3,4,5,7]
从第4个元素开始。4为最小数。4比5小,继续;4比7小,比较结束。
[1,2,3,4,5,7]
从第5个元素开始。5为最小数。5比7小,比较结束。排序结束。
冒泡排序(Bubble Sort)
def bubbleSort(L): swapped = True while swapped: swapped = False for i in range(len(L) - 1): if L[i] > L[i+1]: temp = L[i] L[i] = L[i+1] L[i+1] = temp swapped = True
原理:
从列表的第一个元素开始,若第一个元素小于第二个元素,则继续比较第二个元素和第三个元素。若第二个元素大于第三个元素,则交换第二个元素和第三个元素的位置,再将第三个元素和第四个元素进行比较,小于则继续,大于则交换。依次进行下去,列表里最大的元素将排到列表的末端。从第一个元素开始重复以上步骤,将第二大的元素排到列表里倒数第二的位置,第三大的元素排到倒数第三的位置...即每一次循环会将一个数交换到列表的末端。
示例:
对列表 [3,4,7,2,5,1] 进行排序
[3,4,7,2,5,1]
从第1个元素开始。3比4小,继续;4比7小,继续;7比2大,交换2和7的位置;7比5大,交换7和5的位置;7比1大,交换7和1的位置。比较结束。
[3,4,2,5,1,7]
从第1个元素开始。3比4小,继续;4比2大,交换4和2的位置;4比5小,继续;5比1大,交换5和1的位置;5比7小,比较结束。
[3,2,4,1,5,7]
从第1个元素开始。3比4小,继续;4比2大,交换4和2的位置;4比1大,交换4和1的位置;4比5小,继续;5比7小,比较结束。
[2,3,1,4,5,7]
从第1个元素开始。2比3小,继续;3比1大,交换3和1的位置;3比4小,继续;4比5小,继续;5比7小,比较结束。
[2,1,3,4,5,7]
从第1个元素开始。2比1大,交换2和1的位置;1比3小,继续;3比4小,继续;4比5小,继续;5比7小,比较结束。
[1,2,3,4,5,7]
从第1个元素开始。1比2小,继续;2比3小,继续;3比4小,继续;4比5小,继续;5比7小,比较结束。排序结束。
选择排序和冒泡排序的算法复杂度都是平方级的。但选择排序的效率更高。
标签:
原文地址:http://www.cnblogs.com/glorywu/p/Selection-Sort-Bubble-Sort.html