希爾排序
将原本有大量記錄數的記錄進行分組。分割成若幹序列,此時每個子序列待排序的記錄個數就比較少了,然後在這些子序列内分别進行直接插入排序,當整個序列都基本有序時,再對全體記錄執行一次直接插入排序。其時間複雜度為O(n**3/2),突破了O(n*n)。
快速排序
快速排序是基于一種“二分”的思想,相比較冒泡排序,總的比較和交換的次數減少。核心是設定基準點,跳躍式交換,平均時間複雜度為O(NlogN)。
代碼實作(python)
import random
def shell_sort(test_list):
increment = len(test_list)
while increment > :
# increment分割的序列
increment = increment/ +
# 以下就是直接插入排序的代碼
for i in range(increment, len(test_list)):
# 每一個子序列都設定一個基準
temp = test_list[i]
j = i -
while j >= and test_list[j] > temp:
test_list[j + ] = test_list[j]
j -=
test_list[j + ] = temp
return test_list
def quick_sort(arr, left, right):
if left > right:
return
# temp存的基準數
temp = arr[left]
pivot_index = left
pivot_end = right
while pivot_index != pivot_end:
# 先從右往左找大于基準數的數
while arr[pivot_end] >= temp and pivot_index < pivot_end:
pivot_end -=
# 再從左往右找小于基準數的數
while arr[pivot_index] <= temp and pivot_index < pivot_end:
pivot_index +=
# 交換兩個數在數組中的位置
if pivot_index < pivot_end:
arr[pivot_index], arr[pivot_end] = arr[pivot_end], arr[pivot_index]
# 将基準位置歸位
arr[left], arr[pivot_index] = arr[pivot_index], arr[left]
# 繼續處理左邊的,這是一個遞歸的過程
quick_sort(arr, left, pivot_index - )
# 繼續處理右邊的,這是一個遞歸的過程
quick_sort(arr, pivot_index + , right)
return arr
if __name__ == '__main__':
quick_list = [random.randint(, ) for _ in range()]
print(quick_sort(quick_list, , len(quick_list)-))
shell_list = [random.randint(, ) for _ in range()]
print(quick_sort(shell_list, , len(shell_list)-))