Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Sorting Algorithm Testing Program

This C++ project is a simple performance testing system for sorting algorithms. The provided sorting implementations sort vectors of any comparable data type, allowing the implementation of custom or hybrid sorting algorithms to be tested. The program tests the comparison counts and runtimes of sorting algorithms, and compiles the results to a CSV file for easy access. Included in the program are the implementations of various common sorting algorithms, as well as a hybrid sorting algorithm aiming to improve the slower runtime of quick sorting on smaller datasets.

Included Sorting Algorithms

  • Bubble Sort: A simple sorting method that repeatedly steps through the vector, compares adjacent elements, and swaps them if they are in the wrong order. It has a worst-case time complexity of O(n^2), making it very inefficient for large datasets.

  • Insertion Sort: Builds the final sorted vector one element at a time by iteratively placing each element in its correct position. It has a worst-case time complexity of O(n^2) but performs well on small datasets and nearly sorted lists.

  • Selection Sort: Finds the minimum element in the unsorted part and places it at the beginning, repeating until the vector is sorted. It has a worst-case time complexity of O(n^2), also making it slow on large datasets.

  • Merge Sort: A divide-and-conquer algorithm that divides the vector into halves, recursively sorts them and then merges them back together. It guarantees a stable O(n log n) time complexity, making it efficient for large datasets but requires extra space complexity to hold a temporary vector.

  • Quick Sort: Selects a 'pivot,' partitions the array based on the pivot, and recursively sorts the sub-arrays. It has an average-case time complexity of O(n log n), with a worst-case scenario of O(n^2). It can be slower than some non-recursive sorting methods on smaller or sorted/partially sorted data sets.

  • Shell Sort: Attempts to optimize insertion sort by sorting pairs of elements far apart and progressively reducing the gap. Its time complexity depends on the chosen gap sequence but is generally between O(n log^2 n) and O(n^2).

  • Iquick Sort (Hybrid): Is regular quick sort, except when the sub-vectors being sorted are shorter than some predetermined threshold length, insertion sort is used instead of quick sort. This threshold can be changed to fit use.

How does it work?

The testing program works by using a custom object called SortStats. Each included sorting implementation returns a SortStats object upon completion which holds data about the procedure, such as the name of the sorting algorithm used, the size of the vector sorted, the number of comparisons done, and the CPU time taken for the vector to be sorted, it also holds a string concatenation of this data to be output into a CSV.

The output within the CSV will be ordered as follows, using bubble sort as an example, sorting 4 vectors of varying sizes:

NameNComparisonsCPU Seconds
bubble sort200039980000.003197
bubble sort4000159960000.014169
bubble sort6000359940000.035031
bubble sort8000639920000.066863

The raw CSV file will output in the following format, corresponding to the provided table above:

Bubble sort, 2000, 3998000, 0.003197
Bubble sort, 4000, 15996000, 0.014169
Bubble sort, 6000, 35994000, 0.035031
Bubble sort, 8000, 63992000, 0.066863

These results can be graphed easily if a user chooses to convert to an XLSX file. The following are the results yielded for the various included sorting algorithms using the same randomly generated vectors of increasing sizes for each method:

Non-Recursive Comparisons

Non-Recursive CPU Time

Recursive Comparisons

Recursive CPU Time

*Note: Although the sorting tests were conducted on integers, the vectors can be of any comparable data type.

Installation and Use

Follow these steps to set up and run the testing program in C++:

  1. Clone the repository to your local machine:

    git clone https://github.com/Daksh2060/sorting-test-framework-cpp
  2. To run the included test file, use the makefile:

    make test
    ./test
  3. To use the testing features in your project, include both headers:

    #include "base.h"#include "sort_implementations.h"
  4. In your project file, under main add the following to format the CSV:

    std::ofstream outputFile("sorting_results.csv");
    outputFile <<"Sorting Name, N, Comparisons, Seconds" << std::endl;
  5. Create a SortStats object to hold the results of your sorting, for example:

    std::vector<int> vector_1 = rand_vec(100, 0, 50000);
    SortStats results = bubble_sort(vector_1);
  6. Save the results to your CSV:

    string print = vector_1.to_csv();
    outputFile <<print << std::endl;

Contact

Feel free to reach out if you have any questions, suggestions, or feedback:

About

This C program is a simple testing framework for sorting algorithms. Included are several common sorting implementations, as well as a custom sorting method. This framework allows you to sort and record useful statistics on these sorting algorithms as a CSV file.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages