排序和查找
排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。
常见排序方法:
- 冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
工作原理为,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
- 插入排序
对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
- 快速排序
步骤:
从数列中挑出一个元素,称为 "基准"(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
#冒泡排序
def bubble(list1):
for i in range(len(list1)-1):
for j in range(len(list1)-i-1):
if list1[j]>list1{j+1}:
list1[j],list1[j+1]
#选择排序
def select(list1):
for i in range (len(list1)-1):
min = i
for i in range(i+1,len(list1)):
if list1[min] > list[j]:
min =j
if min != i:
list1[min],list1[i]
#插入排序
def insert(list1):
for i in range(1,len(list1)):
x = list1[i]
j = j-1
while j>=0 and list1[j]>x :
list1[j+1] = list1[j]
j -= 1
list1[j+1] = x
#快速排序
def sub_sort(list1,low,high):
x = list1[low]
while low<high:
while list1[high] >= x and high>low:
high -=1
list1[low] = list1[high]
while list1[low] < x and low<high:
low+=1
list1[high] = list1[low]
list1[low] = x
return low
def quick(list1,low,high):
if low<high:
key = sub_sort(list1,low,high)
quick(list1,low,key-1)
quick(list1,key+1,high)