Python3 中的递归冒泡排序 - 返回 "None"
BubbleSort with recursion in Python3 - Returning "None"
我在 Python 3 中创建了一个小函数来执行 BubbleSort(刚刚学习如何编码),但我找不到问题。
这是代码。它出于某种原因返回 "None"。有人可以看一下吗?谢谢!
arr = [1,5,2,7,3]
def bubbleSort(array):
count = 0
#print("array is currently",array)
for idx in range(len(array)-1):
if array[idx] > array[idx + 1]:
array[idx],array[idx + 1] = array[idx + 1],array[idx]
count += 1
#print("swaped and count is currently",count)
#print("array is currently",array)
if count == 0:
#print("Count is zero")
#print("array is currently",array)
return array
else:
#print("Count is not zero")
bubbleSort(array)
print(bubbleSort(arr))
您需要return排序的数组
arr = [1,5,2,7,3]
def bubbleSort(array):
count = 0
#print("array is currently",array)
for idx in range(len(array)-1):
if array[idx] > array[idx + 1]:
array[idx],array[idx + 1] = array[idx + 1],array[idx]
count += 1
#print("swaped and count is currently",count)
#print("array is currently",array)
if count == 0:
#print("Count is zero")
#print("array is currently",array)
return array
else:
#print("Count is not zero")
return bubbleSort(array)
print(bubbleSort(arr))
冒泡排序使用递归而不使用任何循环,
def bubble_sort_recur(a, i, j, n):
if j == n:
i = i+1
j = 0
if i == n:
return
if a[i] > a[j]:
temp = a[j]
a[j] = a[i]
a[i] = temp
bubble_sort_recur(a, i, j+1, n);
else:
bubble_sort_recur(a, i, j + 1, n);
return a
a = [1, 12, 3, 4]
a = bubble_sort_recur(a, 0, 0, len(a))
print(a)
代码行更少的最简单的解决方案:
def bubblesort(l,n):
for i in range(len(l)-2):
if l[i] > l[i+1]:
l[i], l[i+1] = l[i+1], l[i]
if n>1:
bubblesort(l,n-1)
l = [6,2,9,11,9,3,7,12]
n=len(l)
bubblesort(l,n)
print(l)
我真的很喜欢@user3065757 的方法!无论如何,我的代码是
def rec_bubble_sort(myList):
flag = 0
for i in range(len(myList)-1):
if myList[i] > myList[i+1]:
myList[i], myList[i+1] = myList[i+1], myList[i]
flag = 1
if flag:
return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
else:
return myList
myList = [2, 6, 4, 0, 5, 7, 2, 4, 1]
print(rec_bubble_sort(myList))
我的代码与@RohithS98 类似,但我使用过
return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
原因是函数调用时不会遍历整个列表
public class RecursionBubbleSort {
public static void main(String[] args) {
int[] nums = {4, 3, 2, 1};
int[] sorted = bubbleSort(nums, 1, nums.length);
for(int i: sorted){
System.out.print(i + " ");
}
}
public static int[] bubbleSort(int[] nums, int start, int end){
if(start >= end) return nums;
nums = innerSort(nums, start, end);
return bubbleSort(nums, start, end-1);
}
public static int[] innerSort(int[] nums, int start, int size){
if(start >= size) return nums;
if(nums[start-1] > nums[start]){
int temp = nums[start];
nums[start] = nums[start-1];
nums[start-1] = temp;
}
return innerSort(nums, start+1, size);
}
}
我在 Python 3 中创建了一个小函数来执行 BubbleSort(刚刚学习如何编码),但我找不到问题。
这是代码。它出于某种原因返回 "None"。有人可以看一下吗?谢谢!
arr = [1,5,2,7,3]
def bubbleSort(array):
count = 0
#print("array is currently",array)
for idx in range(len(array)-1):
if array[idx] > array[idx + 1]:
array[idx],array[idx + 1] = array[idx + 1],array[idx]
count += 1
#print("swaped and count is currently",count)
#print("array is currently",array)
if count == 0:
#print("Count is zero")
#print("array is currently",array)
return array
else:
#print("Count is not zero")
bubbleSort(array)
print(bubbleSort(arr))
您需要return排序的数组
arr = [1,5,2,7,3]
def bubbleSort(array):
count = 0
#print("array is currently",array)
for idx in range(len(array)-1):
if array[idx] > array[idx + 1]:
array[idx],array[idx + 1] = array[idx + 1],array[idx]
count += 1
#print("swaped and count is currently",count)
#print("array is currently",array)
if count == 0:
#print("Count is zero")
#print("array is currently",array)
return array
else:
#print("Count is not zero")
return bubbleSort(array)
print(bubbleSort(arr))
冒泡排序使用递归而不使用任何循环,
def bubble_sort_recur(a, i, j, n):
if j == n:
i = i+1
j = 0
if i == n:
return
if a[i] > a[j]:
temp = a[j]
a[j] = a[i]
a[i] = temp
bubble_sort_recur(a, i, j+1, n);
else:
bubble_sort_recur(a, i, j + 1, n);
return a
a = [1, 12, 3, 4]
a = bubble_sort_recur(a, 0, 0, len(a))
print(a)
代码行更少的最简单的解决方案:
def bubblesort(l,n):
for i in range(len(l)-2):
if l[i] > l[i+1]:
l[i], l[i+1] = l[i+1], l[i]
if n>1:
bubblesort(l,n-1)
l = [6,2,9,11,9,3,7,12]
n=len(l)
bubblesort(l,n)
print(l)
我真的很喜欢@user3065757 的方法!无论如何,我的代码是
def rec_bubble_sort(myList):
flag = 0
for i in range(len(myList)-1):
if myList[i] > myList[i+1]:
myList[i], myList[i+1] = myList[i+1], myList[i]
flag = 1
if flag:
return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
else:
return myList
myList = [2, 6, 4, 0, 5, 7, 2, 4, 1]
print(rec_bubble_sort(myList))
我的代码与@RohithS98 类似,但我使用过
return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
原因是函数调用时不会遍历整个列表
public class RecursionBubbleSort {
public static void main(String[] args) {
int[] nums = {4, 3, 2, 1};
int[] sorted = bubbleSort(nums, 1, nums.length);
for(int i: sorted){
System.out.print(i + " ");
}
}
public static int[] bubbleSort(int[] nums, int start, int end){
if(start >= end) return nums;
nums = innerSort(nums, start, end);
return bubbleSort(nums, start, end-1);
}
public static int[] innerSort(int[] nums, int start, int size){
if(start >= size) return nums;
if(nums[start-1] > nums[start]){
int temp = nums[start];
nums[start] = nums[start-1];
nums[start-1] = temp;
}
return innerSort(nums, start+1, size);
}
}