나는 Python과 Java 모두에서 stooge sort를 구현했지만, 입력 크기가 늘어남에 따라 Python에서의 실행 시간은 Java 구현에 비해 기하 급수적으로 증가한 것처럼 보입니다. 파이썬보다 자바에서 알고리즘이 더 빨리 실행되는 것은 드문 일이 아니지만 필연적으로 훨씬 느릴 수는 없습니다.Stooge 파이썬에서 Java에 비해 기하 급수적으로 더 빠르게 정렬합니까?
import java.util.Arrays;
public class Stooge {
public static void main(String[] args) {
int[] nums = new int[10000];
for (int i = 10000; i > 0; i--) {
nums[10000-i] = i;
}
stoogeSort(nums);
System.out.println(Arrays.toString(nums));
}
public static void stoogeSort(int[] L) {
stoogeSort(L, 0, L.length);
}
public static void stoogeSort(int[] L, int i, int j) {
if (L[j-1] < L[i]) {
int tmp = L[i];
L[i] = L[j-1];
L[j-1] = tmp;
}
if (j - i >= 3) {
int t = (j - i)/3;
stoogeSort(L, i, j-t);
stoogeSort(L, i+t, j);
stoogeSort(L, i, j-t);
}
}
}
과 동등한 파이썬 버전 :
def main():
nums = [i for i in range(10000, 0, -1)]
stoogeSort(nums)
print(nums)
def stoogeSort(L):
stoogeSortRec(L, 0, len(L))
def stoogeSortRec(L, i, j):
if L[j-1] < L[i]:
tmp = L[i]
L[i] = L[j-1]
L[j-1] = tmp
if j-i >= 3:
t = (j-i) // 3
stoogeSortRec(L, i, j-t)
stoogeSortRec(L, i+t, j)
stoogeSortRec(L, i, j-t)
파이썬에서 변수를 바꿀 때 임시 변수가 필요하지 않습니다 :'L [i], L [j-1] = L [j-1], L [i]' –
나는 왜 동일한 함수를 두 번 호출합니다. (당신은 처음이자 마지막에 같은 stoogeSortRec을 호출합니다.) 또한 질문과는 관련이 없지만 파이썬에서 스왑에 tmp를 사용할 필요는 없습니다. – James
@Imagine : 반복 된 정렬은 [Stooge Sort] (http://en.wikipedia.org)의 일부입니다. [L [i], L [j-1]/wiki/Stooge_sort) 알고리즘을 사용하여 3 Stooges의 이름을 따 왔습니다. 이 알고리즘은 Bubble Sort보다 훨씬 느립니다. –