|
发表于 2023-10-12 15:24:05
|
显示全部楼层
以下是使用中值快速排序算法进行列表排序的Python代码实现:
- def median_quicksort(arr, reverse=False):
- """
- 使用中值快速排序算法对浮点数列表进行原地排序
- :param arr: 待排序的浮点数列表
- :param reverse: 排序方向,True表示降序,False表示升序
- """
- def partition(arr, low, high):
- """
- 中值快速排序算法的划分函数
- """
- # 选取中值作为基准值
- mid = (low + high) // 2
- if arr[low] > arr[high]:
- arr[low], arr[high] = arr[high], arr[low]
- if arr[mid] > arr[high]:
- arr[mid], arr[high] = arr[high], arr[mid]
- if arr[low] < arr[mid]:
- arr[low], arr[mid] = arr[mid], arr[low]
- pivot = arr[low]
- i = low + 1
- j = high
- while True:
- while i <= j and arr[ i] < pivot:
- i += 1
- while i <= j and arr[j] > pivot:
- j -= 1
- if i <= j:
- arr[ i], arr[j] = arr[j], arr[ i]
- else:
- break
- arr[low], arr[j] = arr[j], arr[low]
- return j
- def quicksort(arr, low, high):
- """
- 中值快速排序算法的递归函数
- """
- if low < high:
- pivot_index = partition(arr, low, high)
- quicksort(arr, low, pivot_index - 1)
- quicksort(arr, pivot_index + 1, high)
- # 调用递归函数进行排序
- quicksort(arr, 0, len(arr) - 1)
- # 根据排序方向进行反转
- if reverse:
- arr.reverse()
复制代码
使用示例:
- arr = [3.14, 1.59, 2.65, 3.58, 9.79, 3.23, 8.46]
- median_quicksort(arr)
- print(arr) # [1.59, 2.65, 3.14, 3.23, 3.58, 8.46, 9.79]
- arr = [3.14, 1.59, 2.65, 3.58, 9.79, 3.23, 8.46]
- median_quicksort(arr, reverse=True)
- print(arr) # [9.79, 8.46, 3.58, 3.23, 3.14, 2.65, 1.59]
复制代码
希望能够帮到你! |
|