選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

83 行
2.9 KiB

  1. """
  2. Analytical Skills
  3. Opgave: insertion sort
  4. (c) 2019 Hogeschool Utrecht
  5. Tijmen Muller (tijmen.muller@hu.nl)
  6. Let op! Je mag voor deze opgave geen extra modules importeren met 'import'.
  7. """
  8. def insert(lst, grens, waarde):
  9. """ Voegt de waarde op de juiste plek in het gesorteerde deel van lijst lst """
  10. # De lijst *lst* is gesorteerd van lst[0] t/m lst[grens]
  11. # Het element *waarde* wordt ingevoegd op de juiste plek in bovengenoemde gesorteerde deel,
  12. # dus hierna is de lijst *lst* gesorteerd van lst[0] t/m lst[grens+1]
  13. # Aanpak: begin bij index *grens* en verplaats elementen groter dan *waarde* naar rechts.
  14. # Als je een waarde tegenkomt die kleiner is dan *waarde* (of het begin van lijst *lst*),
  15. # dan voeg je *waarde* in op de vrijgekomen plek.
  16. return None # De functie retourneert niets
  17. def insertion_sort(lst):
  18. """ Implementatie van het insertion sort algoritme -- sortering vind plaats 'in place'. """
  19. return None # De functie retourneert niets
  20. """==============================================[ HU TESTRAAMWERK ]====================================================
  21. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  22. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  23. """
  24. import random
  25. def test_insert():
  26. lst_res = [3, 5, 7, 11, 13, 2, 9, 14]
  27. lst_test = lst_res.copy()
  28. insert(lst_res, 4, 2)
  29. lst_correct = [2, 3, 5, 7, 11, 13, 9, 14]
  30. assert lst_res == lst_correct, f"Fout: insert({lst_test}, 4, 2) geeft {lst_res} in plaats van {lst_correct}"
  31. lst_test = lst_res.copy()
  32. insert(lst_res, 5, 9)
  33. lst_correct = [2, 3, 5, 7, 9, 11, 13, 14]
  34. assert lst_res == lst_correct, f"Fout: insert({lst_test}, 5, 9) geeft {lst_res} in plaats van {lst_correct}"
  35. lst_test = lst_res.copy()
  36. insert(lst_res, 6, 14)
  37. lst_correct = [2, 3, 5, 7, 9, 11, 13, 14]
  38. assert lst_res == lst_correct, f"Fout: insert({lst_test}, 6, 14) geeft {lst_res} in plaats van {lst_correct}"
  39. def test_insertion_sort():
  40. lst_test = random.sample(range(-99, 100), 6)
  41. lst_copy = lst_test.copy()
  42. insertion_sort(lst_test)
  43. assert lst_test == sorted(lst_copy), f"Fout: insertion_sort({lst_copy}) geeft {lst_test} in plaats van {sorted(lst_copy)}"
  44. if __name__ == '__main__':
  45. try:
  46. print("\x1b[0;32m")
  47. test_insert()
  48. print("Je functie insert() werkt goed!")
  49. test_insertion_sort()
  50. print("Je insertion sort algoritme werkt goed!\n\nKnap gedaan!\n")
  51. print("\x1b[0;30m")
  52. aantal = int(input("Hoeveel getallen zal ik sorteren? "))
  53. lst = list(range(aantal))
  54. random.shuffle(lst)
  55. print("De lijst: \n" + str(lst))
  56. insertion_sort(lst)
  57. print("is na sortering: \n" + str(lst))
  58. except AssertionError as ae:
  59. print("\x1b[0;31m")
  60. print(str(ae))