冒泡排序
def bubbleSort1(alist):
for a in range(len(alist)-1, 0, -1):
for b in range(a):
if alist[b] > alist[b+1]:
alist[b], alist[b+1] = alist[b+1], alist[b]
return alist
def bubbleSort2(alist):
for a in range(len(alist)):
for b in range(0, len(alist)-1-a):
if alist[b] > alist[b+1]:
alist[b], alist[b+1] = alist[b+1], alist[b]
return alist
快速排序
在原列表上进行操作
def quickSort(alist):
qickSortHelper(alist, 0, len(alist)-1)
return alist
def qickSortHelper(alist, first, last):
if first < last:
splitpoint = partion(alist, first, last)
qickSortHelper(alist, first, splitpoint-1)
qickSortHelper(alist, splitpoint+1, last)
return alist
def partion(alist, first, last):
#选择列表第一个元素作为基准值
pivotvalue = alist[first]
#双指针
leftmark = first + 1
rightmark = last
done = False
while not done:
while alist[leftmark] <= alist[rightmark] and alist[leftmark] <= pivotvalue:
leftmark += 1
while alist[leftmark] <= alist[rightmark] and pivotvalue <= alist[rightmark]:
rightmark -= 1
if rightmark < leftmark:
done = True
else:
#rightmark
alist[leftmark], alist[rightmark] = alist[rightmark], alist[leftmark]
alist[first], alist[rightmark] = alist[rightmark], alist[first]
return rightmark
用了额外的空间
def quickSort1(alist):
if len(alist) <= 1:
return alist
pivotvalue = alist[len(alist) // 2]
left = list()
right = list()
mid = list()
for x in alist:
if x < pivotvalue:
left.append(x)
elif x > pivotvalue:
right.append(x)
else:
mid.append(x)
return quickSort1(left) + mid + quickSort1(right)