【问题标题】:Python insertion/selection sort 2d arraysPython插入/选择排序二维数组
【发布时间】:2021-05-27 09:53:15
【问题描述】:

大家好,我正在开展一个项目,该项目将计算每种排序方法对二维数字数组进行排序的速度。但是我似乎找不到任何可用于对二维数组进行排序的方法。 我的选择排序如下:

def selection(arr): 
    for i in range(len(arr)): 
        min_idx = i 
        for j in range(i+1, len(arr)): 
            if arr[min_idx] > arr[j]: 
                min_idx = j 
                
        arr[i], arr[min_idx] = arr[min_idx], arr[i] 

我的插入代码如下:

def insertionSort(arr): 
    for i in range(1, len(arr)): 
        key = arr[i] 
        j = i-1
        while j >=0 and key < arr[j] : 
                arr[j+1] = arr[j] 
                j -= 1
        arr[j+1] = key

我创建二维数组的方式是:

arrayInput = int(input("please input the number of arrays: \n"))
amountInput = int(input("please enter how many numbers per array: \n"))

arr = np.empty((arrayInput, amountInput))
x = arr
y = x

for i in range(arrayInput):
    for j in range(amountInput):
        arr[i][j] = random.randint(0,100) 

我想知道如何将我的选择和插入排序函数转换为能够对二维数组进行排序。 所以如果我的输入是数组 =

input = [
    [2,4,3,1,5], 
    [3,4,5,2,3]
]

我希望函数通过插入和选择对数组进行排序 输出

expected_output = [
    [1,2,3,4,5], 
    [2,3,3,4,5] 
]

如果我有一些不正确的术语,我们深表歉意。

【问题讨论】:

  • “排序二维数组”是什么意思?你能给出一个示例输入和预期输出吗?
  • 所以我想采取类似 array = [[2,4,3,1,5,][3,4,5,2,3]] 的东西,我希望它是选择和插入排序到排序数组 = [[1,2,3,4,5][2,3,3,4,5]] 我希望这能澄清我的意思
  • 修改您的问题,而不是使用 cmets。
  • 我刚刚编辑了我的帖子。很抱歉造成误解。

标签: python arrays multidimensional-array insertion-sort selection-sort


【解决方案1】:

由于您已经有了对数组进行排序的函数,因此我将编写一个 sort2d 函数,给定其中一个函数,像这样对每一行进行排序:

def sort2d(arr, sort):
   for row in range(len(arr)):
      sort(arr[row])

selection2d = lambda arr: sort2d(arr, selection)
insertionSort2d = lambda arr: sort2d(arr, insertionSort)

arr = [[2,4,3,1,5], [3,4,5,2,3]]
selection2d(arr)
print(arr)
[[1, 2, 3, 4, 5], [2, 3, 3, 4, 5]]

您澄清说您想修改函数本身,因此您使用本地函数内联显示的 sort2d 代码:

 def selection2d(arr);
     def selection(arr): 
         for i in range(len(arr)):
             min_idx = i 
             for j in range(i+1, len(arr)): 
                  if arr[min_idx] > arr[j]: 
                     min_idx = j          
          arr[i], arr[min_idx] = arr[min_idx], arr[i]

      for row in range(len(arr)):
          selection(arr[row])

如果您不喜欢这样,请将 for row in range(len(arr2d)): 添加到选择中,然后将对 arr 的现有引用更改为 arr[row]

def selection(arr): 
    for row in range(len(arr)):
        for i in range(len(arr[row])): 
            min_idx = i 
            for j in range(i+1, len(arr[row])): 
                if arr[row][min_idx] > arr[row][j]: 
                    min_idx = j 
            arr[row][i], arr[row][min_idx] = arr[row][min_idx], arr[row][i]

【讨论】:

  • 这不是我想要的。我正在寻找使我已经存在的函数能够对二维数组进行排序的方法。因为它们无法排序。
  • 您希望他们能够同时对 1d 和 2d 数组进行排序还是只能对 2d 数组进行排序?
  • 只有二维数组。
  • 谢谢你,这似乎奏效了。这种修改是否也适用于我的插入排序?
  • 是的,同样的想法。
猜你喜欢
  • 2014-11-04
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2021-02-06
相关资源
最近更新 更多