Question

Specs: Ubuntu 13.04, Python 3.3.1

Background: total beginner to Python, came across this "manual sorting" problem.

What I was asked to do: "Have the user enter 3 numeric values and store them in 3 different variables. Without using lists or sorting algorithms, manually sort these 3 numbers from smallest to largest."

What I was able to come up with:

number = input("Please enter 3 numbers: ")
number = list(number)

a = int(number[0])
b = int(number[1])
c = int(number[2])

new_l = []

if a > b and a > c:
    new_l.append(a)
    if b > c:
        new_l.append(b)
        new_l.append(c)
    else:
        new_l.append(c)
        new_l.append(b)
    print(new_l)

if b > a and b > c:
    new_l.append(b)
    if a > c:
        new_l.append(a)
        new_l.append(c)
    else:
        new_l.append(c)
        new_l.append(a)
    print(new_l)

if c > a and c > b:
    new_l.append(c)
    if a > b:
        new_l.append(a)
    else:
        new_l.append(b)
        new_l.append(a)
    print(new_l)

So my question is: I realize that my solution is extremely limited. First it can only process 3 single digit numbers since once the input string is converted into a list, there is no way to break all digits correctly into individual numbers the user intended. Second,by using this solution, the coder is forced to enumerates all possible scenarios for the 3 numbers to compare with each other, which could be very inflexible if say, the script were to be changed to accepting user input of 100+ numbers.

If you could share some guidance regarding the question above, or regarding how to solve this problem in a different way, I'll be very greatful! Thank you.

Was it helpful?

Solution

For three items, you could use max and min to sort them:

a, b, c = 3, 1, 8

x = min(a, b, c)  # Smallest of the three
z = max(a, b, c)  # Largest of the three
y = (a + b + c) - (x + z)  # Since you have two of the three, you can solve for
                           # the third

print(a, b, c)
print(x, y, z)

If you don't want to use a sorting algorithm but can use lists, you could just pop out the smallest item each time and store it in a new list:

numbers = [1, 8, 9, 6, 2, 3, 1, 4, 5]
output = []

while numbers:
    smallest = min(numbers)
    index = numbers.index(smallest)
    output.append(numbers.pop(index))

print(output)

It's pretty inefficient, but it works.

OTHER TIPS

Using the Bubble Sort Algorithm:

num1=input("Enter a number: ")
num2=input("Enter another number: ")
num3=input("One more! ")
if num1<num2:
    temp=0
    temp=num1
    num1=num2
    num2=temp
if num1<num3:
    temp=0
    temp=num1
    num1=num3
    num3=temp
if num2<num3:
    temp=0
    temp=num2
    num2=num3
    num3=temp
print num3, num2, num1

For Sorting a list manually, you can implement any kind of sorting algorithm like bubble sort, selection sort, insertion sort etc. so you can try the following code of bubble sort

#Bubble sort in python
def bubbleSort(numbers):
  for i in range(len(numbers)):
    for j in range(len(numbers)-i-1):
      if(numbers[j]>numbers[j+1]):
        temp=numbers[j]
        numbers[j]=numbers[j+1]
        numbers[j+1]=temp
        
#taking space seperated numbers as input in list
numbers=list(map(int, input().split(' ')));
bubbleSort(numbers)
print(numbers)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top