二分查找,选择排序,快速排序,归并排序,冒泡排序

墨蓝 2023-01-23 10:55 65阅读 0赞
  1. # 二分查找 平均时间复杂度logn
  2. def bianryfind(list,item):
  3. low =0;
  4. high= len(list)-1
  5. while low <= high
  6. mid = int((low+high)/2)
  7. guess= list[mid]
  8. if guess == item:
  9. return guess
  10. else if guess>item:
  11. high = mid-1
  12. else:
  13. low =mid+1
  14. return None
  15. # 将数组元素按照从小到大的顺序排序,每次从数组中取出最小值
  16. # 平均时间复杂度n^2
  17. def getSmallestIndex(arr):
  18. min_value = arr[0]
  19. min_index = 0
  20. for i in range(1,len(arr)):
  21. if arr[i]<min_value:
  22. min_value = arr[i]
  23. min_index = i
  24. return min_index
  25. def selectionFind(arr):
  26. newarr =[]
  27. for i in range(0,len(arr)):
  28. min_index = getSmallestIndex(arr)
  29. newarr.append(arr[min_index])
  30. return newarr
  31. # 递归
  32. # 快速排序,分而治之的策略
  33. # 平均时间复杂度 nlogn
  34. def quickSort(arr):
  35. if len(arr)<2:
  36. return arr;
  37. else:
  38. pivot = arr[0]
  39. less = [i for i in arr[1:] if i <= pivot]
  40. print(less)
  41. greater = [i for i in arr[1:] if i> pivot]
  42. print(greater)
  43. return quickSort(less)+pivot+quickSort(greater)
  44. #simplesort 把小的不断往前排
  45. # 时间复杂度为n^2
  46. def simplesort(arr):
  47. for i in range(len(arr)-1):
  48. for j in range(i,range(arr)):
  49. if arr[i]<arr[j]:
  50. temp = arr[i]
  51. arr[i]= arr[j]
  52. arr[j] = temp
  53. return arr
  54. # mergesort nlogn
  55. def mergesort(arr):
  56. if len(arr)<2:
  57. return arr
  58. else:
  59. mid = int(len(arr)/2)
  60. right = mergesort(arr[mid:])
  61. left = mergesort(arr[:mid])
  62. return merge(left,right)
  63. #merge 合并两个已经排好序的列表,产生一个新的列表
  64. def merge(left,right):
  65. newarr =[]
  66. i=0
  67. j=0
  68. #对两个列表中的元素进行对比,将最小的元素放到新的列表中
  69. while i < len(left) and j< len(right):
  70. if left[i]<right[j]:
  71. newarr.append(left[i])
  72. i+=1
  73. else:
  74. newarr.append(right[j])
  75. j+=1
  76. #此时left 或者right已经被添加完毕,将其全部加到newarr中
  77. newarr+=left[i:]
  78. newarr+=right[j:]
  79. return newarr

发表评论

表情:
评论列表 (有 0 条评论,65人围观)

还没有评论,来说两句吧...

相关阅读