Advertisement
Guest User

Untitled

a guest
Jun 18th, 2024
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.96 KB | None | 0 0
  1. //------------------------SELECTION SORT------------------------//
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8. void selection_sort(int arr[], int n) {
  9.     int i, j, min_idx, temp;
  10.     for(i = 0; i < n - 1; i++) {
  11.         min_idx = i;
  12.         for(j = i + 1; j < n; j++) {
  13.             if(arr[j] < arr[min_idx])
  14.                 min_idx = j;
  15.         }
  16.         if(min_idx != i) {
  17.             temp = arr[min_idx];
  18.             arr[min_idx] = arr[i];
  19.             arr[i] = temp;
  20.         }
  21.     }
  22. }
  23. void printArray(int arr[], int size) {
  24.     int i;
  25.     for(i = 0; i < size; i++)
  26.         printf("%d ", arr[i]);
  27.     printf("\n");
  28. }
  29. int main(void) {
  30.     int i, n;
  31.     clock_t start, end;
  32.     double cpu_time_used;
  33.     printf("Enter the value of n: ");
  34.     scanf("%d", &n);
  35.     int arr[n];
  36.  
  37.     for(i = 0; i < n; i++) {
  38.         arr[i] = rand() % 1000;
  39.         printf("%d", arr[i]);
  40.     }
  41.  
  42.     start = clock();
  43.     selection_sort(arr, n);
  44.     end = clock();
  45.     cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
  46.     printf("Sorted array:\n");
  47.     printArray(arr, n);
  48.     printf("Execution time: %f seconds\n", cpu_time_used);
  49.     return 0;
  50. }
  51.  
  52.  
  53. //------------------------QUICK SORT------------------------//
  54.  
  55.  
  56. #include <stdio.h>
  57. #include <stdlib.h>
  58. #include <time.h>
  59.  
  60. void swap(int *a, int *b)
  61. {
  62.     int temp = *a;
  63.     *a = *b;
  64.     *b = temp;
  65. }
  66.  
  67. int partition(int arr[], int low, int high) {
  68.     int pivot = arr[low];
  69.     int i =low;
  70.     int j = high;
  71.     while(i < j) {
  72.         while(arr[i] <= pivot && i <= high - 1)
  73.             i++;
  74.         while(arr[j] > pivot && j >= low + 1)
  75.             j--;
  76.         if(i < j)
  77.             swap(&arr[i], &arr[j]);
  78.     }
  79.     swap(&arr[low], &arr[j]);
  80.     return j;
  81. }
  82.  
  83. void quickSort(int arr[], int low, int high) {
  84.     if(low < high) {
  85.         int partitionIndex = partition(arr, low, high);
  86.         quickSort(arr, low, partitionIndex - 1);
  87.         quickSort(arr, partitionIndex + 1, high);
  88.     }
  89. }
  90.  
  91. int main(void) {
  92.     int i, n;
  93.     clock_t start, end;
  94.     double cpu_time_used;
  95.     printf("Enter the value of n: ");
  96.     scanf("%d", &n);
  97.     int arr[n];
  98.     for(i = 0; i < n; i++) {
  99.         arr[i] = rand() % 1000;
  100.         printf("%d", arr[i]);
  101.     }
  102.     start = clock();
  103.     quickSort(arr, 0, n - 1);
  104.     end = clock();
  105.     cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
  106.     printf("\nSorted array: ");
  107.     for(i = 0; i < n; i++)
  108.         printf("%d", arr[i]);
  109.  
  110.     printf("\nExecution time: %f seconds\n", cpu_time_used);
  111.     return 0;
  112. }
  113.  
  114.  
  115. //------------------------MERGE SORT------------------------//
  116.  
  117.  
  118. #include <stdio.h>
  119. #include <stdlib.h>
  120. #include <time.h>
  121.  
  122. void merge(int arr[], int l, int m, int r)
  123. {
  124.     int i, j, k;
  125.     int n1 = m - l + 1;
  126.     int n2 = r - m;
  127.  
  128.     int L[n1], R[n2];
  129.     for(i = 0; i < n1; i++)
  130.         L[i] = arr[l + i];
  131.     for(j = 0; j < n2; j++)
  132.         R[j] = arr[m + 1 + j];
  133.    
  134.     i = 0, j = 0, k = l;
  135.  
  136.     while(i < n1 && j < n2) {
  137.         if(L[i] <= R[j]) {
  138.             arr[k++] = L[i++];
  139.         } else {
  140.             arr[k++] = R[j++];
  141.         }
  142.     }
  143.  
  144.     while(i < n1)
  145.         arr[k++] = L[i++];
  146.     while(j < n2)
  147.         arr[k++] = R[j++];
  148. }
  149.  
  150. void mergeSort(int arr[], int l, int r) {
  151.     if(l < r) {
  152.         int m = l + (r - l) / 2;
  153.         mergeSort(arr, l, m);
  154.         mergeSort(arr, m + 1, r);
  155.         merge(arr, l, m, r);
  156.     }
  157. }
  158.  
  159. int main(void) {
  160.     int i, n;
  161.     clock_t start, end;
  162.     double cpu_time_used;
  163.     printf("Enter the value of n: ");
  164.     scanf("%d", &n);
  165.     int arr[n];
  166.     for(i = 0; i < n; i++) {
  167.         arr[i] = rand() % 1000;
  168.         printf("%d ", arr[i]);
  169.     }
  170.     start = clock();
  171.     mergeSort(arr, 0, n - 1);
  172.     end = clock();
  173.     cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
  174.     printf("\nSorted array: ");
  175.     for(i = 0; i < n; i++) printf("%d ", arr[i]);
  176.     printf("\nExecution time: %f seconds\n", cpu_time_used);
  177.     return 0;
  178. }
  179.  
  180.  
  181. //------------------------PRIM'S ALGORITHM------------------------//
  182.  
  183.  
  184. #include <stdio.h>
  185.  
  186. void my_prim(int adj[][10], int N) {
  187.     int i, j, nv, min, min_cost = 0, u = 0, v = 0;
  188.     int visit[10] = {0};
  189.     visit[0] = 1;
  190.     nv = 1;
  191.     while (nv < N) {
  192.         min = 999;
  193.         for (i = 0; i < N; i++) {
  194.             if (visit[i] == 1) {
  195.                 for (j = 0; j < N; j++) {
  196.                     if (!visit[j] && adj[i][j] < min) {
  197.                         min = adj[i][j];
  198.                         u = i;
  199.                         v = j;
  200.                         printf("\nConsidering edge (%d, %d) with weight %d", i, j, adj[i][j]);
  201.                     }
  202.                 }
  203.             }
  204.         }
  205.         adj[u][v] = 999;
  206.         adj[v][u] = 999;
  207.  
  208.         if (visit[u] == 1 && visit[v] == 0) {
  209.             visit[v] = 1;
  210.             min_cost += min;
  211.             nv++;
  212.             printf("\nEdge %d --> %d : (%d)\n", u, v, min);
  213.         }
  214.     }
  215.     printf("Minimum cost : %d\n", min_cost);
  216. }
  217.  
  218. int main() {
  219.     int adj[10][10], N, i, j;
  220.     printf("Enter number of nodes in the graph: ");
  221.     scanf("%d", &N);
  222.  
  223.     printf("Enter the adjacency matrix\n");
  224.     printf("Enter 0 for no connection and weights for connection\n");
  225.  
  226.     for (i = 0; i < N; i++) {
  227.         for (j = 0; j < N; j++) {
  228.             scanf("%d", &adj[i][j]);
  229.             if (adj[i][j] == 0) {
  230.                 adj[i][j] = 999;
  231.             }
  232.         }
  233.     }
  234.     my_prim(adj, N);
  235.     return 0;
  236. }
  237.  
  238.  
  239. //------------------------KRUSKAL'S ALGORITHM------------------------//
  240.  
  241.  
  242. #include <stdio.h>
  243.  
  244. int ne = 1, min_cost = 0;
  245.  
  246. int main(void) {
  247.     int n, i, j, min, a, b, u, v, cost[20][20], parent[20];
  248.     printf("Enter the number of vertices: ");
  249.     scanf("%d", &n);
  250.     printf("\nEnter the cost matrix: ");
  251.     for (i = 1; i <= n; i++)
  252.         for (j = 1; j <= n; j++)
  253.             scanf("%d", &cost[i][j]);
  254.     for (i = 1; i <= n; i++)
  255.         parent[i] = 0;
  256.     printf("\nThe edges of spanning tree are\n");
  257.  
  258.     while (ne < n) {
  259.         min = 999;
  260.         for (i = 1; i <= n; i++) {
  261.             for (j = 1; j <= n; j++) {
  262.                 if (cost[i][j] < min && cost[i][j] != 0) {
  263.                     min = cost[i][j];
  264.                     a = u = i;
  265.                     b = v = j;
  266.                 }
  267.             }
  268.         }
  269.         while (parent[u]) u = parent[u];
  270.         while (parent[v]) v = parent[v];
  271.         if (u != v) {
  272.             printf("Edge %d\t(%d --> %d) = %d\n", ne++, a, b, min);
  273.             min_cost += min;
  274.             parent[v] = u;
  275.         }
  276.         cost[a][b] = cost[b][a] = 999;
  277.     }
  278.     printf("\nMinimum cost = %d\n", min_cost);
  279. }
  280.  
  281.  
  282. //------------------------DIJKSTRA'S ALGORITHM------------------------//
  283.  
  284.  
  285. #include <stdio.h>
  286. #define infinity 999
  287.  
  288. void dij(int n, int v, int cost[10][10], int dist[10]) {
  289.     int i, u, count, w, flag[10], min;
  290.     for (i = 1; i <= n; i++) {
  291.         flag[i] = 0;
  292.         dist[i] = cost[v][i];
  293.     }
  294.     count = 2;
  295.     while (count <= n) {
  296.         min = infinity;
  297.         for (w = 1; w <= n; w++) {
  298.             if (dist[w] < min && !flag[w]) {
  299.                 min = dist[w];
  300.                 u = w;
  301.             }
  302.         }
  303.         flag[u] = 1;
  304.         count++;
  305.         for (w = 1; w <= n; w++) {
  306.             if ((dist[u] + cost[u][w] < dist[w]) && !flag[w])
  307.                 dist[w] = dist[u] + cost[u][w];
  308.         }
  309.     }
  310. }
  311.  
  312. int main(void) {
  313.     int n, v, i, j, cost[10][10], dist[10];
  314.     printf("\nEnter the number of nodes: ");
  315.     scanf("%d", &n);
  316.  
  317.     printf("Enter the cost matrix:\n");
  318.     for (i = 1; i <= n; i++) {
  319.         for (j = 1; j <= n; j++) {
  320.             scanf("%d", &cost[i][j]);
  321.             if (cost[i][j] == 0) cost[i][j] = infinity;
  322.         }
  323.     }
  324.     printf("\nEnter the source vertex: ");
  325.     scanf("%d", &v);
  326.     dij(n, v, cost, dist);
  327.     printf("\nShortest Path:\n");
  328.     for (i = 1; i <= n; i++) {
  329.         if (i != v)
  330.             printf("%d --> %d, cost = %d\n", v, i, dist[i]);
  331.     }
  332. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement