【Python算法作业】求数组中大小最接近2个元素的差

# 【1.2.9】求数组中大小最接近2个元素的差
"""
算法思想:①先用【快速排序】对数组从大到小排序;
          ②对排列后的降序数组,计算相邻两个元素的差;
          ③找出【最小的差】即可。
"""

# 快速排序算法
'''
参考(图解、其他语言编写的代码):
    《快速排序(过程图解)》(有错误,注意甄别)[]
    《图解快速排序》(有错误,注意甄别)[]
'''
def quickSort(L, _left, _right):
  left = _left  # 因为需要递归,所以先保存 左指针(哨兵)
  right = _right  # 因为需要递归,所以先保存 右指针(哨兵)
  baseNum = L[left]  # 将基准元素设置为 L[left]
  # 右左交替扫描,直到两个指针(哨兵) left == right
  while (left != right):
    # 先从右向左扫描(因为选择的 baseNum 基准元素是最左边的L[left])
    #   找到第1个比base基准元素小的元素
    while (right > left and L[right] <= baseNum):  # 降序排列,使用【<=】;如果是升序排列,使用【>=】
      right = right - 1
    # 需要交替 进行右、左扫描:现进行【从左往右】扫描
    while (left < right and L[left] >= baseNum):  # 降序排列,使用【>=】;如果是升序排列,使用【<=】
      left = left + 1
    if (left < right):  # 交换 两个指针(哨兵) left、 right 所指的值
      temp = L[left]
      L[left] = L[right]
      L[right] = temp

    # 两个指针(哨兵) left == right ,该位置就是 之前选择的 基准元素baseNum = L[left] 应该所在的位置
    #     交汇指针(哨兵) 所指的数值,放入到 原基准元素baseNum 的位置,也就是 [_left] 位置
    L[_left] = L[right]
    #     基准元素baseNum 入列归位!
    L[right] = baseNum

    # 对 基准元素baseNum 左边的元素进行【递归 快速排序】;注意这时,两个指针(哨兵) left == right
    if ((_left < left) and (left >= 1)):  # 注意 if语句中的条件判断,防止无穷递归调用!
      quickSort(L, _left, left - 1)
    # 对 基准元素baseNum 右边的元素进行【递归 快速排序】;注意这时,两个指针(哨兵) left == right
    if ((right < _right) and (right + 1 <= _right)):  # 注意 if语句中的条件判断,防止无穷递归调用!
      quickSort(L, right + 1, _right)

# 针对已经按照 从大到小 降序排列的 列表,求【最接近的两个元素的差】
def findMinDifference(L):
  minDifferent = 2 ** 100  # 先设置差为一个 很大的数
  # 考虑 L 只包含 1个元素
  if (len(L) == 1):
    print("只有 1个元素!")
    return
  if (len(L) > 1):  # L至少有2个及以上的元素
    for i in range(len(L) - 1):
      if((L[i] - L[i + 1]) < minDifferent):
        minDifferent = (L[i] - L[i + 1])
    return minDifferent


if __name__ == '__main__':
  strA = input("请输入要排序的一系列数(用空格分隔):")
  A = strA.split()  # A 是一个list列表
  # A列表中的元素,进行 float 数值化
  A = [float(A[i]) for i in range(len(A))]
  print("您输入的{}个数值为:{}".format(len(A), A))

  # 按照【从大到小】进行快速排序,即【降序排列】
  quickSort(A, 0, len(A) - 1)
  print("降序排列之后:{}".format(A))

  # 求【最接近的两个元素的差】
  minDiff = findMinDifference(A)
  print("最接近的两个元素的差为:{}".format(minDiff))

  print("主程序运行结束。")

测试:

请输入要排序的一系列数(用空格分隔):1 3 6 9 2 3
您输入的6个数值为:[1.0, 3.0, 6.0, 9.0, 2.0, 3.0]
降序排列之后:[9.0, 6.0, 3.0, 3.0, 2.0, 1.0]
最接近的两个元素的差为:0.0
主程序运行结束。