一些基础的排序和查找算法(Python)
排序
print ( "### 复杂度比较" "\n"
"排序法 平均时间复杂度 最好时间 最差时间 稳定度 空间复杂度" "\n"
"0冒泡排序 O(n^2) O(n) O(n^2) 稳定 O(1)" "\n"
"1选择排序 O(n^2) O(n^2) O(n^2) 不稳定 O(1)" "\n"
"2快速排序 O(n*log n) O(n*log n) O(n^2) 不稳定 O(log n)" "\n"
"3插入排序 O(n^2) O(n) O(n^2) 稳定 O(1)" "\n"
)
冒泡排序:从前往后相邻两个元素比较,最大的数不断后移,一次过后,最大数在最后。
def bubble_sort ( alist) :
for i in range ( len ( alist) - 1 ) :
for j in range ( len ( alist) - 1 - i) :
if alsit[ j] > alist[ j + 1 ] :
alist[ j] , alist[ j + 1 ] = alist[ j + 1 ] , alist[ j]
return alist
选择排序:未排序第一个元素和后面元素依次比较,最小的数不断前移, 一次排序后,最小的数在第一位。
def select_sort ( alist) :
for i in range ( len ( alist) - 1 ) :
for j in range ( i + 1 , len ( alist) ) :
if alist[ i] > alist[ j] :
alist[ i] , alist[ j] = alist[ j] , alist[ i]
return alist
快速排序:一个基准,小的放前面,大的放后面,递归地排序。
def quick_sort ( alist) :
if len ( alist) < 2 :
return alist
else :
mid = alist[ 0 ]
low = [ i for i in alist[ 1 : ] if i < mid]
high = [ j for j in alist[ 1 : ] if j >= mid]
return quick_sort( low) + [ mid] + quick_sort( high)
def insert_sort ( alist) :
for i in range ( 1 , len ( alist) ) :
for j in range ( i) :
if alist[ i] < alist[ j] :
alist. insert( j, alist[ i] )
alist. pop( i + 1 )
break
return alist
查找
def sequential_search ( lis, target) :
for i in range ( len ( lis) ) :
if lis[ i] == target:
return i
return False
二分查找(有序查找):时间复杂度O(log n) 空间复杂度 O(1)。
def binary_search ( lis, target) :
left = 0
right = len ( lis) - 1
while left <= right:
mid = ( right + left) // 2
if lis[ mid] == target:
return mid
elif lis[ mid] < target:
left = mid + 1
else :
right = mid - 1
return False