Advertisement
Bewin

Sort

Nov 27th, 2023 (edited)
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int n;
  5.  
  6. void swap(int *p, int *q) {
  7.     int temp = *p;
  8.     *p = *q;
  9.     *q = temp;
  10. }
  11.  
  12. void display(int arr[]) {
  13.     printf("\n[");
  14.     for (int i = 0; i < n - 1; i++) {
  15.         printf("%d, ", arr[i]);
  16.     }
  17.     printf("%d]\n", arr[n - 1]);
  18. }
  19.  
  20. void enterArray(int arr[]) {
  21.     printf("Enter %d elements:", n);
  22.     for (int i = 0; i < n; i++) {
  23.         scanf("%d", &arr[i]);
  24.     }
  25.  
  26. }
  27.  
  28. void bubbleSort() {
  29.     printf("Enter size of the array:");
  30.     scanf("%d", &n);
  31.     int arr[n];
  32.     enterArray(arr);
  33.     printf("Array Before Sorting:");
  34.     display(arr);
  35.     for (int i = 0; i < n - 1; ++i) {
  36.         for (int j = 0; j < n - i - 1; ++j) {
  37.             if (arr[j] > arr[j + 1])
  38.                 swap(&arr[j], &arr[j + 1]);
  39.         }
  40.     }
  41.     printf("Array After Sorting:");
  42.     display(arr);
  43. }
  44.  
  45. void selectionSort() {
  46.     printf("Enter size of the array:");
  47.     scanf("%d", &n);
  48.     int arr[n];
  49.     enterArray(arr);
  50.     printf("Array Before Sorting:");
  51.     display(arr);
  52.     for (int i = 0; i < n - 1; ++i) {
  53.         int min = i;
  54.         for (int j = i + 1; j < n; ++j) {
  55.             if (arr[j] < arr[min])
  56.                 min = j;
  57.         }
  58.         if (arr[i] != arr[min])
  59.             swap(&arr[i], &arr[min]);
  60.     }
  61.     printf("Array After Sorting:");
  62.     display(arr);
  63. }
  64.  
  65. void insertionSort() {
  66.     printf("Enter size of the array:");
  67.     scanf("%d", &n);
  68.     int arr[n];
  69.     enterArray(arr);
  70.     printf("Array Before Sorting:");
  71.     display(arr);
  72.     for (int i = 1; i < n; ++i) {
  73.         int key = arr[i];
  74.         int j = i - 1;
  75.         while (key < arr[j] && j >= 0) {
  76.             arr[j + 1] = arr[j];
  77.             --j;
  78.         }
  79.         arr[j + 1] = key;
  80.     }
  81.     printf("Array After Sorting:");
  82.     display(arr);
  83. }
  84.  
  85. int partition(int arr[], int leftEnd, int rightEnd) {
  86.     int left = leftEnd;
  87.     int right = rightEnd;
  88.     int pivot = arr[left];
  89.     while (left < right) {
  90.         while (left < rightEnd && arr[left] <= pivot)
  91.             left++;
  92.         while (right > leftEnd && arr[right] > pivot)
  93.             right--;
  94.         if (left < right)
  95.             swap(&arr[left], &arr[right]);
  96.         else
  97.             swap(&arr[leftEnd], &arr[right]);
  98.     }
  99.     return right;
  100. }
  101.  
  102. void quickSort(int arr[], int leftEnd, int rightEnd) {
  103.     if (leftEnd > rightEnd)
  104.         return;
  105.     else {
  106.         int p = partition(arr, leftEnd, rightEnd);
  107.         quickSort(arr, leftEnd, p - 1);
  108.         quickSort(arr, p + 1, rightEnd);
  109.     }
  110. }
  111.  
  112. void merge(int arr[], int left, int mid, int right) {
  113.     int i = left, temp[n];
  114.     int j = mid + 1;
  115.     int k = left;
  116.     while (i <= mid && j <= right) {
  117.         if (arr[i] < arr[j]) {
  118.             temp[k] = arr[i];
  119.             i++;
  120.             k++;
  121.         } else {
  122.             temp[k] = arr[j];
  123.             j++;
  124.             k++;
  125.         }
  126.     }
  127.     while (i <= mid) {
  128.         temp[k] = arr[i];
  129.         i++;
  130.         k++;
  131.     }
  132.     while (j <= right) {
  133.         temp[k] = arr[j];
  134.         j++;
  135.         k++;
  136.     }
  137.     i = left;
  138.     while (i <= right) {
  139.         arr[i] = temp[i];
  140.         i++;
  141.     }
  142. }
  143.  
  144. void mergeSort(int arr[], int left, int right) {
  145.     int mid = (left + right) / 2;
  146.     if (left < right) {
  147.         mergeSort(arr, left, mid);
  148.         mergeSort(arr, mid + 1, right);
  149.         merge(arr, left, mid, right);
  150.     }
  151. }
  152.  
  153. void createHeap(int arr[], int N) {
  154.     for (int i = 1; i <= N; i++) {
  155.         int j = i;
  156.         while ((j - 1) / 2 >= 0 && arr[j] > arr[(j - 1) / 2]) {
  157.             swap(&arr[j], &arr[(j - 1) / 2]);
  158.             j = (j - 1) / 2;
  159.         }
  160.     }
  161. }
  162.  
  163. void removeMax(int arr[], int N) {
  164.     swap(&arr[N], &arr[0]);
  165. }
  166.  
  167. void rebuildHeap(int arr[], int N) {
  168.     if (N == 0)
  169.         return;
  170.     int j = 0, flag = 1, child;
  171.     while (flag == 1) {
  172.         int rchild = 2 * j + 2;
  173.         int lchild = 2 * j + 1;
  174.         if (rchild <= N) {
  175.             if (arr[rchild] > arr[lchild])
  176.                 child = rchild;
  177.             else
  178.                 child = lchild;
  179.         } else if (lchild <= N)
  180.             child = lchild;
  181.         else
  182.             flag = 0;
  183.         if (arr[child] > arr[j]) {
  184.             swap(&arr[child], &arr[j]);
  185.             j = child;
  186.         } else
  187.             flag = 0;
  188.     }
  189. }
  190.  
  191. void heapSort(int arr[], int N) {
  192.     createHeap(arr, N - 1);
  193.     for (int i = N - 1; i >= 1; i--) {
  194.         removeMax(arr, i);
  195.         rebuildHeap(arr, i - 1);
  196.     }
  197. }
  198.  
  199. int main() {
  200.     int arg;
  201.     while (1) {
  202.         printf("\n******************");
  203.         printf("\nEnter your choice:\n1. Bubble Sort\n2. Selection Sort\n3. Insertion Sort\n4. Quick Sort\n5. Merge Sort\n6. Heap Sort\n0. Exit");
  204.         printf("\n******************\n");
  205.         scanf("%d", &arg);
  206.         switch (arg) {
  207.             case 1:
  208.                 bubbleSort();
  209.                 break;
  210.             case 2:
  211.                 selectionSort();
  212.                 break;
  213.             case 3:
  214.                 insertionSort();
  215.                 break;
  216.             case 4: {
  217.                 printf("Enter size of the array:");
  218.                 scanf("%d", &n);
  219.                 int arr[n];
  220.                 enterArray(arr);
  221.                 printf("Array Before Sorting:");
  222.                 display(arr);
  223.                 quickSort(arr, 0, n - 1);
  224.                 printf("Array After Sorting:");
  225.                 display(arr);
  226.                 break;
  227.             }
  228.             case 5: {
  229.                 printf("Enter size of the array:");
  230.                 scanf("%d", &n);
  231.                 int arr[n];
  232.                 enterArray(arr);
  233.                 printf("Array Before Sorting:");
  234.                 display(arr);
  235.                 mergeSort(arr, 0, n - 1);
  236.                 printf("Array After Sorting:");
  237.                 display(arr);
  238.                 break;
  239.             }
  240.             case 6: {
  241.                 printf("Enter size of the array:");
  242.                 scanf("%d", &n);
  243.                 int arr[n];
  244.                 enterArray(arr);
  245.                 printf("Array Before Sorting:");
  246.                 display(arr);
  247.                 heapSort(arr, n);
  248.                 printf("Array After Sorting:");
  249.                 display(arr);
  250.                 break;
  251.             }
  252.  
  253.             case 0:
  254.                 exit(0);
  255.             default:
  256.                 printf("Invalid Argument!");
  257.                 break;
  258.         }
  259.     }
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement