本文讲解了十三个查找和排序算法的原理以及实现。码字不易,喜欢请点赞!!!有问题请留言,看到会回复,谢谢!!!
1.顺序查找
按照列表顺序挨个对比是否为目标值,知道找到,时间复杂度O(N)
nums = [4,7,12,20,36,48,50,77,90]
n = 36
for i in nums:
if(i == n):
print(i)
break
#输出36
2.二分查找
列表是顺序列表,每次从中间值开始搜索,筛除一般,时间复杂度O(logN)
nums = [4,7,12,20,36,48,50,77,90]
n = 36
i = 0
j = len(nums)-1
while(i < j):
mid = (i+j)//2
if(nums[mid] == n):
print(nums[mid])
break
elif(nums[mid] > n):
j = mid - 1
else:
i = mid + 1
#输出36
3.Hash查找
根据索引直接查找,时间复杂度为O(1)
问题:Hash查找会出现冲突,解决方法线性探测法或其他方法
4.冒泡排序
每次比较临近两个值,互换位置,每次循环完最大值到最后位置。时间复杂度为O(n^2)。
nums = [77,4,20,90,36,12,7,50,48]
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if(nums[j]>nums[j+1]):
nums[j],nums[j+1] = nums[j+1],nums[j]
print(nums)
从下面输出中可以看出后面几次都没有数据交换,因此可以改进。
[4, 20, 77, 36, 12, 7, 50, 48, 90]
[4, 20, 36, 12, 7, 50, 48, 77, 90]
[4, 20, 12, 7, 36, 48, 50, 77, 90]
[4, 12, 7, 20, 36, 48, 50, 77, 90]
[4,