Search code examples
pythonfunctionsortingselectionbuilt-in

Selection Sort Problems


I'm attempting to create a simple selection sort program in python without using any built in functions. My problem right now is my code is only sorting the first digit of the list. What's wrong?

Here's my sort

  def selectionsort(list1):
    for x in range(len(list1)):
      tiniest = minimum(list1)
      swap(tiniest,x,list1)
  return(list1)

Here's the minimum and swap functions I'm using

    def swap(index1,index2,list1):
       TheList = list1 
       temp = TheList[index1]
       TheList[index1] = TheList[index2]
       TheList[index2] = temp
       return(TheList)
    def minimum(list1):
       small = list1[0] 
       for i in list1:
          if i < small:
          small = i
       return small

An example of output List = [3,2,1,0]

Output = [0,2,1,3]


Solution

  • Some simplification will make it more readable/comprehensible:

    def swap(lst, i1, i2):
      lst[i1], lst[i2] = lst[i2], lst[i1]  # easy-swapping by multi assignment 
    
    def minimum(lst, s):  # s: start index
      min_val, min_index = lst[s], s
      for i in range(s+1, len(lst)):
        if lst[i] < min_val:
          min_val, min_index = lst[i], i
      return min_index  # return index of minimum, not minimum itself
    
    def selection_sort(lst):
      for i in range(len(lst)): 
        swap(lst, i, minimum(lst, i))  
        # find min index starting from current and swap with current