【问题标题】:Why is my BubbleSort algorithm working in Java but not in Python为什么我的 BubbleSort 算法在 Java 中有效,但在 Python 中无效
【发布时间】:2021-04-15 16:22:15
【问题描述】:

为什么这段代码似乎有效:

package de.Algos;

import java.util.Arrays;

public class Sort {
    public static int[] swap(int[] A, int i, int j) {
        int temp = A[i];
        A[i] = A[j];
        A[j] = temp;
        return A;
    }

    public static int[] bubbleSort(int[] A){
        int n = A.length;
        for(int i=0;i<=n-2;i++){
            for(int j=0;j<=n-2-i;j++){
                if(A[j]>A[j+1]){
                    swap(A,j,j+1);
                }
            }
        }
        return A;
    }

    public static void main(String[] args){
        int[] A = {12,3,4,5,24,5,3,35352,24,13513513,33};
        System.out.println(Arrays.toString(A));
        A = bubbleSort(A);
        System.out.println(Arrays.toString(A));
    }
}

虽然我的 Python 翻译没有:

# currently not working yet

def swap(A, a, b): 
    A[a], A[b] = A[b], A[b]
    return A

def bubbleSort(A, n):
    for i in range(0,n-1,1):
        for j in range(0,n-1-i,1):
            if A[j] > A[j+1]:
                A = swap(A,j,j+1)
                display(f'Swapped {A[j]} at {j} with {A[j+1]} at {j+1}')
    return A   
A = [0, 1, 4, 25, 5, 745, 253264, 3]
display(A)
A = bubbleSort(A, len(A))
display(A)

我犯了什么愚蠢的错误?

我真的找不到。 也许它在 Python 中的 for 函数中,通过范围表现不同?有没有更优雅的解决方案可以让它看起来与给出的伪代码一样接近?

BubbleSort(A, n)
for i←0 to n-2 {
 for j←0 to n-2-i {
 if (A[j] > A[j+1]) {
     swap(A, j, j+1)
 }
 }
}

诚挚的问候和感谢,

【问题讨论】:

  • A[a], A[b] = A[b], A[b]bs 太多。
  • 哇谢谢小错误大影响:)
  • 是的。请注意您的打印输出如何显示“将 3 在 ... 与 3 在 ... 交换”。从那里,您可以检查Aswap 之前和之后是什么,这会导致您发现swap 是问题所在。

标签: python sorting bubble-sort


【解决方案1】:

我可以看到您在python中的swap方法定义与Java中的不同。

在 Java 中,您确实在交换 A[j] 和 A[j+1]。在 Python 中,没有交换,因为 A[j] = A[j+1] 但 A[j+1] 保持不变。试试:

def swap(A, a, b): 
    A[a], A[b] = A[b], A[a]
    return A

【讨论】:

    【解决方案2】:
    def swap(A, a, b): 
        A[a], A[b] = A[b], A[a]
        return A
    

    您的交换功能不正确。 首先,右侧取值,然后将它们保存在左侧 - 不排序,A[a] = A[b] 然后 A[b] = A[b] 你认为已经是 A[a]。 ..如果我很清楚...很难用语言来表达。

    【讨论】:

      【解决方案3】:

      现在可以使用的 Python 解决方案是:

      def swap(A, a, b):
          A[a], A[b] = A[b], A[a]
          return A
      
      def bubbleSort(A, n):
          for i in range(0,n-1,1):
              for j in range(0,n-1-i,1):
                  if A[j] > A[j+1]:
                      A = swap(A,j,j+1)
                      display(f'Swapped {A[j]} at {j} with {A[j+1]} at {j+1}')
          return A

      【讨论】:

        猜你喜欢
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        • 2011-03-12
        • 2015-09-12
        • 2011-07-19
        相关资源
        最近更新 更多