标签:
选择排序/单元排序(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