I have written the below bubble sort code in Python.
def bubble_sort():
num_list=[]
list_cnt=input("How many numbers you would like to sort:")
for i in range(int(list_cnt)): ### need to convert the value returned by input()
num_list.append(input("Enter " +str(i)+" number:")) ##here we are using append method of list
print("The values input are as follows:")
print(num_list)
print(len(num_list))
### Below new line of code added to convert list to integer###
num_list=list(map(int,num_list))
## with the above line the code is now working as expected##
max_index=len(num_list)-1 ## because list begins with 0
print("max_index is:",max_index)
for i in range(len(num_list)-1):
j=0
swapped=False
for j in range(len(num_list)-1):
if num_list[j] > num_list[j+1]:
num_list[j],num_list[j+1]=num_list[j+1],num_list[j]
print("Sorted when j=" +str(j)+ " and i=" + str(i)+ " is:\n ")
print(num_list)
swapped=True
if not swapped:
break
print("The sorted list is :")
print(num_list)
bubble_sort()
2 Answers 2
Your code's quite good. I'd however change it in the following ways:
- Move the creation of the lits out of the
buble_sort
. - Remove the
print
s frombuble_sort
. - Follow PEP8.
- Change
for i in range(...)
towhile True:
. - Use better variables.
num_list
toarray
could do. - Use
str.format
, rather than string addition. - Change the creation of
num_list
to use a list comprehension.
def bubble_sort(array):
while True:
swapped = False
for j in range(len(array)-1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
swapped = True
if not swapped:
break
if __name__ == '__main__':
amount = input("How many numbers you would like to sort:")
array = [
int(input("Enter {} number:".format(i)))
for i in range(int(amount))
]
print("The values input are as follows: {}".format(array))
bubble_sort(array)
print("The sorted list is: {}".format(array))
-
6\$\begingroup\$ I agree with everything except renaming
num_list
toarray
, since it is a list, not an array.numbers
would probably be better, since it explains what it contains, and implies that it is a sequence without stating a concrete type. \$\endgroup\$Raimund Krämer– Raimund Krämer2018年04月25日 13:43:48 +00:00Commented Apr 25, 2018 at 13:43 -
\$\begingroup\$ @RaimundKrämer You could use
list
however that shadowslist
. They're also IIRC arrays with list interfaces, so it's simpler to call it a list. Also we're only using it for it's array interface. But yeahnumbers
could work. \$\endgroup\$2018年04月25日 13:45:10 +00:00Commented Apr 25, 2018 at 13:45
The IO code is mixed with the logic code. I separated them. Also, I made a few other changes including removing useless comments (the code should speak for itself, your comments don't add much; if you need comments, that probably means you should simplify your code). I also converted the numbers as soon as they are input.
def bubble_sort(num_list):
for i in range(len(num_list)-1):
swapped = False
for j in range(len(num_list) - 1):
if num_list[j] > num_list[j+1]:
num_list[j], num_list[j+1] = num_list[j+1], num_list[j]
swapped = True
if not swapped:
return
def main():
num_list = []
num_items = int(input("How many numbers you would like to sort:"))
for i in range(num_items):
num_list.append(int(input("Enter " + str(i + 1) + "st number:")))
bubble_sort(num_list)
print("The sorted list is:")
print(num_list)
if __name__ == '__main__':
main()