冒泡排序实现

  1. class BubbleSort:
  2. def sort(self,data:list):
  3. for i in range(len(data)-1):
  4. for j in range(len(data)-1-i):
  5. is_swap = True
  6. if data[j] > data[j+1]:
  7. data[j], data[j+1] = data[j+1], data[j]

对于有序数据或者完全有序的数据而言,可使用下面方式进行优化

优化

  1. class BubbleSort:
  2. def sort(self,data:list):
  3. for i in range(len(data)-1):
  4. # 记录是否存在中间过程中就已经排好序的情况
  5. is_swap = False
  6. for j in range(len(data)-1-i):
  7. is_swap = True
  8. if data[j] > data[j+1]:
  9. data[j], data[j+1] = data[j+1], data[j]
  10. if not is_swap:
  11. break

希尔排序

  1. class ShellSort:
  2. @staticmethod
  3. def sort(data: list):
  4. h = len(data) // 2
  5. while h >= 1:
  6. start = 0
  7. while start < h:
  8. # 当前组开始的下标
  9. i = start + h
  10. # 对data[start,start+h,start+2h...]进行插入排序
  11. while i < len(data):
  12. temp = data[i]
  13. # 需要替换的位置 暂定当前位置
  14. j = i
  15. while 0 <= j - h and temp < data[j - h]:
  16. data[j] = data[j - h]
  17. j -= h
  18. data[j] = temp
  19. i += h
  20. start += 1
  21. # 每次间隔都为之前的 1/2
  22. h = h // 2
  • 时间复杂度 O(n^2- n^2/ 2*logn)