【发布时间】: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 在 ... 交换”。从那里,您可以检查
A在swap之前和之后是什么,这会导致您发现swap是问题所在。
标签: python sorting bubble-sort