insertionsort.cpp 991 B

123456789101112131415161718192021222324252627282930313233343536
  1. // Insertion Sort
  2. //
  3. // Author: Rob Gysel
  4. // ECS60, UC Davis
  5. // Adapted from: Lysecky & Vahid "Data Structures Essentials", zyBooks
  6. #include "insertionsort.h"
  7. void InsertionSort(std::vector<int>* numbers, int *comparisonCounter, int *memAccessCounter) {
  8. int i = 0;
  9. int j = 0;
  10. int temp = 0; // Temporary variable for swap
  11. for (i = 1; i < numbers->size(); ++i) {
  12. *memAccessCounter++;
  13. *comparisonCounter++;
  14. j = i;
  15. // Insert numbers[i] into sorted part
  16. // stopping once numbers[i] in correct position
  17. while (j > 0 && (*numbers)[j] < (*numbers)[j - 1]) {
  18. *comparisonCounter++;
  19. *memAccessCounter = *memAccessCounter + 2;
  20. // Swap numbers[j] and numbers[j - 1]
  21. temp = (*numbers)[j];
  22. *memAccessCounter++;
  23. (*numbers)[j] = (*numbers)[j - 1];
  24. *memAccessCounter = *memAccessCounter + 2;
  25. (*numbers)[j - 1] = temp;
  26. *memAccessCounter++;
  27. --j;
  28. }
  29. }
  30. return;
  31. }