insertionsort.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. #include <iostream>
  8. #include <cstdio>
  9. int* InsertionSort(std::vector<int>* numbers){
  10. int i = 0;
  11. int j = 0;
  12. int temp = 0; // Temporary variable for swap
  13. int comparisonCounter = 0;
  14. int memAccessCounter = 0;
  15. static int returnCounters[2];
  16. for (i = 1; i < numbers->size(); ++i) {
  17. memAccessCounter = memAccessCounter + 2;
  18. comparisonCounter++;
  19. j = i;
  20. // Insert numbers[i] into sorted part
  21. // stopping once numbers[i] in correct position
  22. while (j > 0 && (*numbers)[j] < (*numbers)[j - 1]) {
  23. comparisonCounter++;
  24. memAccessCounter = memAccessCounter + 2;
  25. // Swap numbers[j] and numbers[j - 1]
  26. temp = (*numbers)[j];
  27. memAccessCounter++;
  28. (*numbers)[j] = (*numbers)[j - 1];
  29. memAccessCounter = memAccessCounter + 2;
  30. (*numbers)[j - 1] = temp;
  31. memAccessCounter++;
  32. --j;
  33. }
  34. }
  35. // return both counters to timealgorithms
  36. returnCounters[0] = comparisonCounter;
  37. returnCounters[1] = memAccessCounter;
  38. return returnCounters;
  39. }