题解 | #图片整理#
图片整理
http://www.nowcoder.com/practice/2de4127fda5e46858aa85d254af43941
冒泡排序
从左到右,依次比较相邻元素的大小,x[i+1]比x[i]小,则二者交换位置,如此往复,一次遍历之后,最大元素在最右侧;第二次遍历,则只需遍历前len - 1个元素即可,以此类推
def mpao_sort(a):
b = list(a)
for i in range(len(b)-1):
for j in range(len(b) - i-1):
if ord(b[j+1]) < ord(b[j]):
b[j+1], b[j] = b[j], b[j+1]
print(''.join(b))
L = []
while True:
try:
L.append(input())
except:
break
for i in range(len(L)):
mpao_sort(L[i])
快速排序
选择第一个元素为主元,分别设置左右标兵位置为序列的开头和结尾,r向左依次移动,直到找到比主元小的元素,l依次向右移动,直到找到比主元大的元素,判断如果l<r,则交换二者的位置,然后继续寻找;如果l>=r,则交换r所在位置元素和主元; 然后采用递归,依次对主元两侧元素进行上述同样的操作
def quicksort(array, beg, end):
if beg < end:
pivot_index = beg
pivot = ord(array[beg])
left = beg
right = end
while left < right:
while ord(array[right]) >= pivot and left < right:
right -= 1
while ord(array[left]) <= pivot and left < right:
left += 1
if left < right:
array[left], array[right] = array[right], array[left]
if pivot_index < right:
array[pivot_index], array[right] = array[right], array[pivot_index]
quicksort(array, beg, right-1)
quicksort(array, right+1, end)
L = []
while True:
try:
L.append(input())
except:
break
for i in range(len(L)):
a = list(L[i])
quicksort(a, 0, len(L[i])-1)
print(''.join(a))
选择排序
共遍历n-1次,每次从未排序的元素中,找到最小值,然后跟未排序的序列第一个元素交换位置,以此类推
def selection_sort(array):
for i in range(len(array)):
min_index = i
for j in range(i+1,len(array)):
if ord(array[j]) < ord(array[min_index]):
min_index = j
if min_index != i:
array[i], array[min_index] = array[min_index], array[i]
print(''.join(array))
L = []
while True:
try:
L.append(input())
except:
break
for i in range(len(L)):
a = list(L[i])
selection_sort(a)