Whalefall126 发表于 2023-10-12 15:23:08

sorting

Write a function defined as:

def median_quicksort(arr, reverse = False):
that uses a quicksort with median partition scheme to sort a list of floats in-place. The parameter reverse selects the direction of the sort order where reverse == True indicates a descending sort.


求解答,学了也不会系列

isdkz 发表于 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 > arr:
            arr, arr = arr, arr
      if arr > arr:
            arr, arr = arr, arr
      if arr < arr:
            arr, arr = arr, arr
      pivot = arr
      i = low + 1
      j = high
      while True:
            while i <= j and arr[ i] < pivot:
                i += 1
            while i <= j and arr > pivot:
                j -= 1
            if i <= j:
                arr[ i], arr = arr, arr[ i]
            else:
                break
      arr, arr = arr, arr
      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 =
median_quicksort(arr)
print(arr)#

arr =
median_quicksort(arr, reverse=True)
print(arr)#


希望能够帮到你!

陶远航 发表于 2023-10-12 15:24:17

Sure, I can help with that. Here's a Python function that uses the quicksort algorithm with a median partition scheme. The function sorts a list of floats in-place. If the reverse parameter is set to True, the list is sorted in descending order.

def median_quicksort(arr, low=0, high=None, reverse=False):
    if high is None:
      high = len(arr) - 1
    if low < high:
      pi = partition(arr, low, high)
      median_quicksort(arr, low, pi - 1, reverse)
      median_quicksort(arr, pi + 1, high, reverse)
    if reverse:
      arr.reverse()

def partition(arr, low, high):
    median = sorted(, arr, arr[(low + high) // 2]])
    pivot_index = arr.index(median)
    arr, arr = arr, arr
    i = low - 1
    for j in range(low, high):
      if arr <= arr:
            i = i + 1
            arr[ i], arr = arr, arr[ i]
    arr, arr = arr, arr
    return i + 1


Here's how you can use the function:

arr =
median_quicksort(arr)
print(arr)# Output:

arr =
median_quicksort(arr, reverse=True)
print(arr)# Output:


This function works by first partitioning the array so that elements less than the pivot are to the left of the pivot and elements greater than the pivot are to the right. The pivot is chosen as the median of the first, middle, and last elements of the array. This process is then recursively applied to the sub-arrays to the left and right of the pivot. If reverse is True, the array is reversed at the end to give a descending sort.
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-12 15:25:01

下面是使用快速排序和中位数划分方案来实现原地排序的 Python 代码:


def median_quicksort(arr, reverse=False):
    def partition(arr, low, high):
      pivot_index = find_median(arr, low, high)
      pivot = arr
      
      # Move pivot to the end
      arr, arr = arr, arr
      
      i = low
      for j in range(low, high):
            if arr < pivot:
                arr, arr = arr, arr
                i += 1
      
      # Move pivot to its final position
      arr, arr = arr, arr
      return i
   
    def find_median(arr, low, high):
      mid = (low + high) // 2
      if arr > arr:
            arr, arr = arr, arr
      if arr > arr:
            arr, arr = arr, arr
      if arr > arr:
            arr, arr = arr, arr
      return mid
   
    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)
   
    n = len(arr)
   
    quicksort(arr, 0, n - 1)
   
    if reverse:
      arr.reverse()


这段代码定义了一个名为median_quicksort()的函数,它使用快速排序算法和中位数划分方案对给定的浮点数列表进行原地排序。参数reverse用于选择排序的方向,如果reverse为True,则按降序排序。

在函数内部,有三个辅助函数:partition()、find_median()和quicksort()。partition()函数用于执行中位数划分,find_median()函数用于找到一个近似的中位数索引,quicksort()函数用于递归地排序子数组。

代码通过调用quicksort()函数来对整个数组进行排序。如果reverse参数为True,则使用arr.reverse()反转数组以实现降序排序。

这样,你可以调用median_quicksort()函数来对浮点数列表进行排序,例如:


my_list =
median_quicksort(my_list)
print(my_list)# 输出:

my_list =
median_quicksort(my_list, reverse=True)
print(my_list)# 输出:


希望这个回答对你有所帮助!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: sorting