排序算法
-
为什么排序? 为了快速查找
-
常见的查找和排序算法:
排序:冒泡、选择、插入、希尔、快速、归并、堆排序、基数排序、计数排序…
查找:二分查找
1.冒泡排序(稳定)
原理:
找出最大数放后面
5 8 1 -3 11 100 -55 99
冒泡排序:
1、 5 1 -3 8 11 -55 99 100
2、 1 -3 5 8 -55 11 99 100
3、 -3 1 5 -55 8 11 99 100
4、 -3 1 -55 5 8 11 99 100
5、 -3 -55 1 5 8 11 99 100
6、 -55 -3 1 5 8 11 99 100
代码:
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr) - i -1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
2.选择排序(不稳定)
原理:
选择最小的放前面
5 8 1 -3 11 100 -55 99
选择排序:
1、 -55 5 8 1 -3 11 100 99
2、 -55 -3 8 1 5 11 100 99
3、 -55 -3 1 8 5 11 100 99
4、 -55 -3 1 5 8 11 100 99
5、 -55 -3 1 5 8 11 100 99
6、 -55 -3 1 5 8 11 100 99
7、 -55 -3 1 5 8 11 99 100
代码:
def select_sort(arr):
for i in range(len(arr)):
temp = i
for j in range(i, len(arr)):
if arr[temp] > arr[j]:
temp = arr[j]
if temp != arr[i]:
arr[i], arr[temp] = arr[temp], arr[i]
return arr
def select_sort2(arr):
for i in range(len(arr)):
for j in range(i, len(arr)):
if arr[i] > arr[j]:
arr[i], arr[j] = arr[j], arr[i]
return arr
3.插入排序(稳定)
原理:
5 8 1 -3 11 100 -55 99
插入排序:
1、 5 8 1 -3 11 100 -55 99
2、 1 5 8 -3 11 100 -55 99
3、 -3 1 5 8 11 100 -55 99
4、 -3 1 5 8 11 100 -55 99
5、 -3 1 5 8 11 100 -55 99
6、 -55 -3 1 5 8 11 100 99
7、 -55 -3 1 5 8 11 99 100
代码:
def insert_sort(arr):
for i in range(1, len(arr)):
j = i
while j > 0 and arr[j] < arr[j-1]:
arr[j], arr[j - 1] = arr[j - 1], arr[j]
j -= 1
return arr
二分查找
def bin_search(arr, data):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == data:
return mid
elif arr[mid] > data:
high = mid - 1
else:
low = mid + 1
return