input: Write a function to optimize the given Python code for sorting a set of numbers in O(n) time complexity. The function should take an unsorted list of numbers and return a sorted list.
  def sort_list(unsorted_list):
      sorted_list = []
      while unsorted_list:
          min_elem = min(unsorted_list)
          unsorted_list.remove(min_elem)
          sorted_list.append(min_elem)
      return sorted_list
  
  assert sort_list([2, 6, 3, 8, 4])==[2, 3, 4, 6, 8]
  assert sort_list([9, 1, 5, 7, 3])==[1, 3, 5, 7, 9]
  assert sort_list([10, 2, 8, 3, 6])==[2, 3, 6, 8, 10]
  assert sort_list([])==[]
  assert sort_list([1])==[1]
output: def sort_list(unsorted_list):
      if not unsorted_list:
          return []
      max_val = max(unsorted_list)
      count = [0] * (max_val + 1)
      for num in unsorted_list:
          count[num] += 1
      sorted_list = []
      for i in range(max_val + 1):
          sorted_list.extend([i] * count[i])
      return sorted_list