冒泡
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
a = [45,85,3,45,96,27,85,91]
for i in range(len(a)-1):
for j in range(0,len(a)-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
最优时间复杂度为:o(n)
最坏时间复杂度为:o(n²)
选择
1.设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素找到最小的元素,将它和第一个元素互换
2.重复上述操作,我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序
a = [45,85,3,45,96,27,85,91]
for i in range(0, len(a)-1):
for j in range(i+1, len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
print(a)
最优时间复杂度为:o(n²)
最坏时间复杂度为:o(n²)
插入
后面的一次向前比较
a = [45,85,3,45,96,27,85,91]
for i in range(1, len(a)):
for j in range(i, 0, -1):
if a[j] < a[j-1]:
a[j], a[j-1] = a[j-1], a[j]
print(a)
最优时间复杂度为:o(n)
最坏时间复杂度为:o(n²)
快速排序
对于一串序列,首先从中选取一个数,凡是小于这个数的值就被放在左边一摞,凡是大于这个数的值就被放在右边一摞。然后,继续对左右两摞进行快速排序。
def fast_sort(a, start, end):
if start >= end:
return
mid = a[start]
low = start
high = end
while low < high:
while low < high and a[high] >= mid:
high -= 1
a[low] = a[high]
while low < high and a[low] < mid:
low += 1
a[high] = a[low]
a[low] = mid
fast_sort(a, start, low - 1)
fast_sort(a, low + 1, end)
a = [22, 34, 45, 66, 16, 10, 18, 28]
fast_sort(a, 0, len(a) - 1)
print(a)
最优时间复杂度为:o(logn)
最坏时间复杂度为:o(n²)
二分法查找
(有序)
最优时间复杂度为:o(1)
最坏时间复杂度为:o(logn)
递归(效率低)
def search(a,item):
if len(a) == 0:
return False
elem = item
mid = len(a) // 2
if elem == a[mid]:
return True
elif elem > a[mid]:
return search(a[mid + 1:], item)
else:
return search(a[:mid], item)
非递归(效率高)
a = [22, 34, 45, 66, 16, 10, 18, 28]
def search(a, item):
low = 0
high = len(a) - 1
while low <= hing:
mid = (low + high) // 2
if item == a[mid]:
return True
elif item > a[mid]:
low = mid + 1
else:
high = mid - 1
return False
print(search(a, 18))
转载:https://blog.csdn.net/Bankofli/article/details/104878192
查看评论