{"id":16323705,"url":"https://github.com/im-rises/cmergesortparallel","last_synced_at":"2025-05-14T15:12:10.643Z","repository":{"id":62765015,"uuid":"561393628","full_name":"Im-Rises/cMergeSortParallel","owner":"Im-Rises","description":"Sequential and parallel merge sort algorithm implemented in C using OpenMP","archived":false,"fork":false,"pushed_at":"2023-02-19T21:04:55.000Z","size":116038,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-17T04:26:33.070Z","etag":null,"topics":["algorithm","c","merge-sort","openmp","parallel","pthread"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Im-Rises.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-03T15:39:48.000Z","updated_at":"2024-02-05T02:55:06.000Z","dependencies_parsed_at":"2024-11-06T16:52:47.144Z","dependency_job_id":null,"html_url":"https://github.com/Im-Rises/cMergeSortParallel","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FcMergeSortParallel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FcMergeSortParallel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FcMergeSortParallel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Im-Rises%2FcMergeSortParallel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Im-Rises","download_url":"https://codeload.github.com/Im-Rises/cMergeSortParallel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254170067,"owners_count":22026219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","c","merge-sort","openmp","parallel","pthread"],"created_at":"2024-10-10T22:55:27.725Z","updated_at":"2025-05-14T15:12:10.595Z","avatar_url":"https://github.com/Im-Rises.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cMergeSortParallel\n\n\u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/59691442/183268126-b3d19e66-8f2d-463a-805e-ae6ef7cc6c01.png\" alt=\"cmakeLogo\" style=\"height:60px;\"/\u003e\n      \u003cimg src=\"https://img.shields.io/badge/C-00599C?style=for-the-badge\u0026logo=c\u0026logoColor=white\" alt=\"cLogo\" style=\"height:60px;\"/\u003e\n      \u003cimg src=\"https://user-images.githubusercontent.com/59691442/199836862-958b46d2-2426-48e0-9866-68dd364f9066.png\" alt=\"openmpLogo\" style=\"height:60px;\"/\u003e\n\u003c/p\u003e\n\n## Description\n\nMerge Sort algorithm implemented in C available in three versions:\n\n- Sequential\n- Parallel with OpenMP\n- Parallel with Pthreads (Linux only)\n\nMerge sort is a divide and conquer algorithm that was invented by John von Neumann in 1945.  \nA detailed description of the algorithm can be found [here](https://en.wikipedia.org/wiki/Merge_sort).\n\nThe implemented algorithm are the following:\n\n- [x] Merge Sort\n- [x] Parallel Merge Sort\n- [x] Parallel Merge Sort using OpenMP\n- [x] Parallel Merge Sort using PThread\n\n## Dependencies\n\n- C90\n- GNU90 (PThread)\n- CMake or Make\n- C90 compiler (GCC, Clang, MSVC, ...)\n\n## Table of Contents\n\n- [Description](#description)\n- [Dependencies](#Dependencies)\n- [Table of Contents](#table-of-contents)\n- [Quickstart](#Quickstart)\n- [Algorithms](#Algorithms)\n    - [Sequential Merge Sort V1](#Sequential-Merge-Sort-V1)\n    - [Sequential Merge Sort V2](#Sequential-Merge-Sort-V2)\n    - [Merge Sort algorithm chosen](#Merge-Sort-algorithm-chosen)\n    - [Parallel Merge Sort](#Parallel-Merge-Sort)\n    - [Details on the implementation](#Details-on-the-implementation)\n- [Details on the implementation](#Details-on-the-implementation)\n    - [Sequential Merge Sort](#Sequential-Merge-Sort)\n    - [Parallel Merge Sort with OpenMP](#Parallel-Merge-Sort-with-OpenMP)\n    - [Parallel Merge Sort with Pthreads](#Parallel-Merge-Sort-with-Pthreads)\n- [Results](#Results)\n- [How to use](#How-to-use)\n- [Speed test](#Speed-test)\n- [Compilation](#Compilation)\n    - [Compilation with CMake](#Compilation-with-CMake)\n        - [Windows](#Windows)\n        - [Linux](#Linux)\n    - [Compile with Make](#Compile-with-Make)\n    - [Setup](#Setup)\n    - [Compilation](#Compilation)\n- [Project Architecture](#Project-Architecture)\n- [GitHub Actions](#GitHub-Actions)\n- [Documentations](#Documentations)\n- [Contributors](#Contributors)\n\n## Quickstart\n\nDepending on you `operating system` you will need to install some libs, they are installed differently depending on your\nsystem, please follow the instructions in the `Compilation` section.\n\nFor an explanation on `How to use` go to the according section.\n\nThe different algorithms used are described below.\n\n## Algorithms\n\nThe different algorithms used are described below.\n\nFor more detail about them refer to :  \nIntroduction to Algorithms, 3rd Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein\n\n### Sequential Merge Sort V1\n\n```algorithm\nmergeSort(A, n, temp)\n    if n \u003e 1\n        mergeSort(A, n/2, temp)\n        mergeSort(A + n/2, n - n/2, temp)\n        merge(A, n, temp)\n```\n\n```algorithm\nmerge(A, n, temp)\n    i = 0\n    j = n/2\n    k = 0\n    while i \u003c n/2 and j \u003c n\n        if A[i] \u003c A[j]\n            temp[k] = A[i]\n            i++\n        else\n            temp[k] = A[j]\n            j++\n        k++\n    while i \u003c n/2\n        temp[k] = A[i]\n        i++\n        k++\n    while j \u003c n\n        temp[k] = A[j]\n        j++\n        k++\n    for i = 0 to n\n        A[i] = temp[i]\n```\n\n### Sequential Merge Sort V2\n\n```algorithm\nmergeSort(A,p,r)\n    if p \u003c r\n        q = (p+r)/2\n        mergeSort(A,p,q)\n        mergeSort(A,q+1,r)\n        merge(A,p,q,r)\n```\n\n```algorithm\nmerge(A,p,q,r)\n    n1 = q-p+1\n    n2 = r-q\n    let L[1..n1+1] and R[1..n2+1] be new arrays\n    for i = 1 to n1\n        L[i] = A[p+i-1]\n    for j = 1 to n2\n        R[j] = A[q+j]\n    L[n1+1] = ∞\n    R[n2+1] = ∞\n    i = 1\n    j = 1\n    for k = p to r\n        if L[i] \u003c= R[j]\n            A[k] = L[i]\n            i = i + 1\n        else A[k] = R[j]\n            j = j + 1\n```\n\n### Merge Sort algorithm chosen\n\nThe algorithm chosen is the first one, it is the simplest to understand and the most efficient.\nThe most efficient because it only creates one buffer array named `temp` of size `n` and not two of size `n/2` at each\nrecursive call\nof the function `merge`.\nBy comparing the two algorithms, for any array size the first algorithm was two times faster than the second one.\n\n\u003e **Note**\n\u003e For the parallel algorithms, the first algorithm is used.\n\n### Parallel Merge Sort\n\nThe parallel merge sort is a simple implementation of the merge sort algorithm, it uses the `fork` system call to create\na new process for each recursive call.\nThe `merge` function is the same as the one used in the sequential merge sort.\nThe algorithm is written using `Cilk` syntax:\n\n```algorithm\nmergeSortParallel(A, n, temp)\n    if n \u003e 1\n        spawn mergeSortParallel(A, n/2, temp)\n        mergeSortParallel(A + n/2, n - n/2, temp)\n        sync\n        merge(A, n, temp)\n```\n\n```algorithm\nmerge(A, n, temp)\n    i = 0\n    j = n/2\n    k = 0\n    while i \u003c n/2 and j \u003c n\n        if A[i] \u003c A[j]\n            temp[k] = A[i]\n            i++\n        else\n            temp[k] = A[j]\n            j++\n        k++\n    while i \u003c n/2\n        temp[k] = A[i]\n        i++\n        k++\n    while j \u003c n\n        temp[k] = A[j]\n        j++\n        k++\n    for i = 0 to n\n        A[i] = temp[i]\n```\n\n## Details on the implementation\n\nThe parallel algorithm are customized to prevent creation of threads if the array size is too small.\nThe `mergeSort` function is called with a minimum size of `MULTITHREAD_THRESHOLD` (defined in the header file).\nIf the array size is smaller than this threshold, the algorithm is executed sequentially preventing loss of performance\nfrom creating thread for small arrays.\n\nThis also apply in the recursive calls of the `mergeSort` function. After some division of the recursive call of\nthe `mergeSort` function the array size\nis smaller than the threshold, the algorithm is executed sequentially.\n\nThe algorithm is the following:\n\n```algorithm\nmergeSortParallel(A, n, temp)\n    if (size \u003c MULTITHREAD_THRESHOLD)\n        mergeSortSequential(array, size, bufferArray);\n    else\n        mergeSortParallel(A, n/2, temp)\n        mergeSortParallel(A + n/2, n - n/2, temp)\n        merge(A, n, temp)\n```\n\n## Results\n\n| Number of int (Array size) | Number of threads | Sequential time (Work) (s) | Parallel OpenMP time (s) | Parallel Pthread time (s) |\n|----------------------------|-------------------|----------------------------|--------------------------|---------------------------|\n| 1000000                    | 1                 | 0.219678                   | 0.21941                  | 0.23636                   |\n|                            | 2                 |                            | 0.140376                 | 0.137846                  |  \n\n\u003cdetails\u003e\n\u003csummary\u003eClick here to get the details for an array of 10 to 10 000 000 ints.\u003c/summary\u003e\n\n| Number of int (Array size) | Number of threads | Sequential time (Work) (s) | Parallel OpenMP time (s) | Parallel Pthread time (s) |\n|----------------------------|-------------------|----------------------------|--------------------------|---------------------------|\n| 10                         | 1                 | 0.000023                   | 0.000079                 | 0.000012                  |\n|                            | 2                 |                            | 0.000216                 | 0.000011                  |\n|                            | 4                 |                            | 0.000439                 | 0.000011                  |\n|                            | 8                 |                            | 0.007493                 | 0.000011                  |\n|                            | 16                |                            | 0.000752                 | 0.000012                  |\n|                            | 24                |                            | 0.000861                 | 0.000012                  |\n|                            | 48                |                            | 0.00178                  | 0.000012                  |\n| 100                        | 1                 | 0.000034                   | 0.000039                 | 0.000025                  |\n|                            | 2                 |                            | 0.000228                 | 0.000025                  |\n|                            | 4                 |                            | 0.000211                 | 0.000032                  |\n|                            | 8                 |                            | 0.005617                 | 0.000025                  |\n|                            | 16                |                            | 0.000866                 | 0.000025                  |\n|                            | 24                |                            | 0.001311                 | 0.000025                  |\n|                            | 48                |                            | 0.002728                 | 0.000026                  |\n| 1000                       | 1                 | 0.000383                   | 0.000387                 | 0.000159                  |\n|                            | 2                 |                            | 0.00411                  | 0.001905                  |\n|                            | 4                 |                            | 0.000531                 | 0.000493                  |\n|                            | 8                 |                            | 0.007541                 | 0.000425                  |\n|                            | 16                |                            | 0.000808                 | 0.000354                  |\n|                            | 24                |                            | 0.001013                 | 0.000369                  |\n|                            | 48                |                            | 0.002234                 | 0.000368                  |\n| 10000                      | 1                 | 0.003015                   | 0.001617                 | 0.00202                   |\n|                            | 2                 |                            | 0.002415                 | 0.001964                  |\n|                            | 4                 |                            | 0.002049                 | 0.002111                  |\n|                            | 8                 |                            | 0.003257                 | 0.001249                  |\n|                            | 16                |                            | 0.003079                 | 0.003737                  |\n|                            | 24                |                            | 0.003156                 | 0.003423                  |\n|                            | 48                |                            | 0.00544                  | 0.00294                   |\n| 100000                     | 1                 | 0.01854                    | 0.018547                 | 0.199                     |\n|                            | 2                 |                            | 0.021651                 | 0.015189                  |\n|                            | 4                 |                            | 0.01688                  | 0.008408                  |\n|                            | 8                 |                            | 0.018882                 | 0.01606                   |\n|                            | 16                |                            | 0.013631                 | 0.016771                  |\n|                            | 24                |                            | 0.016659                 | 0.02296                   |\n|                            | 48                |                            | 0.0227                   | 0.035204                  |\n| 1000000                    | 1                 | 0.219678                   | 0.21941                  | 0.23636                   |\n|                            | 2                 |                            | 0.140376                 | 0.137846                  |\n|                            | 4                 |                            | 0.1255587                | 0.103484                  |\n|                            | 8                 |                            | 0.102441                 | 0.133948                  |\n|                            | 16                |                            | 0.082464                 | 0.092748                  |\n|                            | 24                |                            | 0.088869                 | 0.294837                  |\n|                            | 48                |                            | 0.077861                 | 0.131344                  |\n| 10000000                   | 1                 | 2.568292                   | 2.564808                 | 2.768002                  |\n|                            | 2                 |                            | 1.473908                 | 1.47016                   |\n|                            | 4                 |                            | 1.177107                 | 1.08515                   |\n|                            | 8                 |                            | 0.892717                 | 1.117797                  |\n|                            | 16                |                            | 0.754185                 | 0.924634                  |\n|                            | 24                |                            | 0.738589                 | 0.786672                  |\n|                            | 48                |                            | 0.714466                 | 0.709331                  |\n\n\u003c/details\u003e\n\n\u003e **Note**  \n\u003e The results are indicative and may vary depending on the machine.\n\n## How to use\n\nFirst you need to build the scripts (check the `compilation` section).\n\nOnce done you have 2-4 executables :\n\n- fileGenerator\n- PThreadVersion (only for Linux)\n- OpenMPVersion\n- sequentialVersion\n\nThe `fileGenerator` one is only used to generate the files that will be used by the other 'merge sort' executables.\n\nIf you don't want to use it you can use the file named `test_file.txt` at the root of the project.\n\nA file is composed of several lines:\n\n- the first one is the number of elements in the array\n- the second one is the array\n\nFor example :\n\n```\n4\n11 \n2 \n3 \n400\n```\n\nAll the executables work the same way, use pipes to redirect the input file to the executable.\n\nFor example :\n\n```bash\n./mergeSortSequential \u003c ./test_file\n```\n\nor\n\n```bash\ncat  ./test_file.txt | ./mergeSortSequential\n```\n\nYou can then redirect the output to a file using `\u003e` or `\u003e\u003e`.\n\nExample :\n\n```bash\n./mergeSortSequential \u003c ./test_file.txt \u003e ./output_file.txt\n```\n\nThe output file will now contain the sorted array.\n\nThe parallel versions of the merge sort has an additional argument which is the number of threads to use.\n\nFor example :\n\n```bash\n./mergeSortOpenMP \u003c ./test_file \u003e ./output_file.txt 4\n```\n\nThe parallel merge sort using OpenMP is started with 4 threads.\n\nThe output will explain some details about the execution of the algorithm.\n\n- The number of int in the array\n- The number of threads used (only for the parallel versions)\n- The CPU Time taken to sort the array\n- The Wall Time taken to sort the array\n- The sorted array (only if the array is small enough)\n\n## Speed test\n\nThe project is set up with some `bash` scripts to test the speed of the different algorithms.\nYou can start the test by running the `speedTest.sh` script in the `speedTest` folder.\n\n```bash\n./speedTest.sh \u003cbase array size\u003e \u003cmultiplier\u003e \u003citeration number\u003e\n```\n\nExample :\n\n```bash\n./speedTest.sh 10 10 6\n```\n\nIt will generate 6 files with 10, 100, 1000, 10000, 100000, 1000000 elements in the array (they will be located in\nthe `speedTest/speedTestArrays` folder).\n\nIt will then run the different algorithms on the different files and output the results in the `speedTest/outputs`\nfolder.\n\n\u003e **Warning**\n\u003e You need to build the project before running the script (check the `compilation` section).\n\u003e You also need to be in the `speedTest` folder to run the script correctly.\n\n## Compilation\n\nTo compile the app, the first thing you need to do is install a C++ compiler:\n\n- Visual Studio (MSVC)\n- Mingw\n- GCC\n- Cmake\n- Make\n- ...\n\n### Compilation with CMake\n\nFirst download CMake:  \n\u003chttps://cmake.org\u003e\n\nOr install it with your package manager under Linux:\n\n```bash\nsudo apt install cmake\n```\n\nOnce your environment is set up, depending on your operating system you'll need to install some libs before compiling\nthe project. Refer to the section below `Windows` or `Linux`;\n\n#### Windows\n\nWindows users can directly compile the project by typing the following command at the project root folder:\n\n```bash\ncmake -B . -DCMAKE_BUILD_TYPE=Release\n```\n\n\u003e **Note**  \n\u003e If you're using Visual Studio, you can install CMake directly from the IDE (Visual Studio Installer).\n\u003e Then you need to open the Project as a CMake Project, not a Visual Studio Project!\n\n#### Linux\n\nLinux's users need to install some libs before compiling the project:\n\nFirst you need to install `gcc` by typing the following command:\n\n```bash\nsudo apt-get install gcc\n```\n\nThen install CMake, type the following command to install it.\n\n```bash\nsudo apt-get install cmake\n```\n\nYou also need to install the OpenMP lib. Type the following command at the project root.\n\n```bash\nsudo apt-get install libomp-dev\n```\n\nYou are now able to compile the project. Go to the project root and type the following command:\n\n```bash\ncmake -B . -DCMAKE_BUILD_TYPE=Release\n```\n\n### Compile with Make\n\nYou can also use the Makefile to compile the project. Type the following command at the project root:\n\n#### Setup\n\nFirst you need to install `make` and `gcc` for linux users:\n\nFor linux:\n\n```shell\nsudo apt-get install gcc\n```\n\n```bash\nsudo apt-get install make\n```\n\n\u003c!--\nYou also need to install the mingw compiler to compile the Windows version under linux:\n\n```bash\nsudo apt-get install mingw-w64\n```\n\nYou also need the LLVM OpenMP lib. Type the following command at the project root.\n\n```shell\nsudo apt-get install libomp-12-dev\n```\n--\u003e\n\n#### Compilation\n\nYou can compile the project for Linux:\n\n```bash\nmake\n```\n\nto compile the project for Linux only.\n\n```bash\nmake LinuxVer\n```\n\n\u003c!--\n\nand to compile the project for Windows only.\n\n```bash\nmake WindowsVer\n```\n--\u003e\n\nTo compile only one of the scripts, type:\n\n```bash\nmake \u003cscript_name\u003e\n```\n\nThe Linux scripts names are:\n\n- `fileGen`\n- `mergeSortSeq`\n- `mergeSortParOpenMp`\n- `mergeSortParPthread`\n\n\u003c!--\n\nThe Windows ones are:\n\n- `fileGenWin`\n- `sequentialVerWin`\n- `OpenMpVerWin`\n\n--\u003e\n\nThe executables will be created in the `BuildMakeFile` folder.\n\n## Project Architecture\n\n~~~\nParticleEngine\n├── .github\n│  ├── workflows\n│  │   |── c-cpp.yml\n│  │   |── cmake.yml\n│  │   |── codeql.yml\n│  │   |── cpp-linter.yml\n│  │   |── dependency-review.yml\n│  │   |── flawfinder.yml\n│  │   |── greetings.yml\n│  │   |── label.yml\n│  │   |── msvc.yml\n│  │   |── stale.yml\n|  ├── labeler.yml\n|  ├── release.yml\n├── buildMakeFile\n|  ├── readme.txt\n|  ├── test_file.txt\n├── commonFunctions\n|  ├── commonFunctions.h\n|  ├── commonFunctions.c\n├── fileGenerator\n|  ├── CMakelists.txt\n|  ├── main.c\n├── OpenMpVersion\n|  ├── CMakelists.txt\n|  ├── main.c\n|  ├── mergeSortParallelOpenMP.c\n|  ├── mergeSortParallelOpenMP.h\n├── PThreadVersion\n|  ├── CMakelists.txt\n|  ├── main.c\n|  ├── mergeSortParallelPThread.c\n|  ├── mergeSortParallelPThread.h\n├── sequentialVersion\n|  ├── CMakelists.txt\n|  ├── main.c\n|  ├── mergeSortSequential.c\n|  ├── mergeSortSequential.h\n├── speedTest\n│  ├── outputs\n│  │   |── readme.txt\n│  ├── speedTestArrays\n│  │   |── readme.txt\n|  ├── fileGenerator.sh\n|  ├── multithreads_comparison.xlsx\n|  ├── multithreads_comparison.csv\n|  ├── speedTest.sh\n├── test\n|  ├── CMakelists.txt\n|  ├── mergeSortOpenMPTest.c\n|  ├── mergeSortPThreadTest.c\n|  ├── mergeSortSequentialTest.c\n|  ├── sortFunctions.h\n├── ParticleEngine\n├── .clang-format\n├── .clang-tidy\n├── .editorconfig\n├── .gitattributes\n├── .gitignore\n├── CMakelists.txt\n├── CMakePresets.json\n├── CMakeSettings.json\n├── Makefile\n├── README.md\n~~~\n\n## GitHub Actions\n\n[![CMake](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/cmake.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/cmake.yml)\n[![Microsoft C++ Code Analysis](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/msvc.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/msvc.yml)\n[![CodeQL](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/codeql.yml)\n[![cpp-linter](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/cpp-linter.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/cpp-linter.yml)\n[![flawfinder](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/flawfinder.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/flawfinder.yml)\n[![C/C++ CI](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/c-cpp.yml/badge.svg?branch=main)](https://github.com/Im-Rises/cMergeSortParallel/actions/workflows/c-cpp.yml)\n\n- CMake: This script is used to build the project.\n- MSVC: This script is used to analyze the code with Microsoft C++ Code Analysis.\n- CodeQL: This script is used to analyze the code with CodeQL.\n- cpp-linter: This script is used to check the C code formatting.\n- flawfinder: This script is used to analyze the code with flawfinder.\n- c-cpp: This script is used to build the project with C/C++ CI using make.\n\n## Documentations\n\nIntroduction to Algorithms, 3rd Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein\n\nWikipedia:  \n\u003chttps://en.wikipedia.org/wiki/Merge_sort\u003e\n\nOpenMP:  \n\u003chttps://www.openmp.org\u003e\n\nOpenMp CMake:  \n\u003chttps://cliutils.gitlab.io/modern-cmake/chapters/packages/OpenMP.html\u003e\n\nStackOverflow:  \n\u003chttps://stackoverflow.com/questions/52767944/merge-sort-with-pthreads-in-c\u003e  \n\u003chttps://stackoverflow.com/questions/67131148/how-to-do-merge-sort-without-using-additional-arrays-for-splitting-the-initial-a\u003e\n\ncliutils:  \n\u003chttps://cliutils.gitlab.io/modern-cmake/chapters/packages/OpenMP.html\u003e\n\n## Contributors\n\nQuentin MOREL:\n\n- @Im-Rises\n- \u003chttps://github.com/Im-Rises\u003e\n\n[![GitHub contributors](https://contrib.rocks/image?repo=Im-Rises/cMergeSortParallel)](https://github.com/Im-Rises/cMergeSortParallel/graphs/contributors)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-rises%2Fcmergesortparallel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fim-rises%2Fcmergesortparallel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-rises%2Fcmergesortparallel/lists"}