Nuparu00

gg

Dec 15th, 2021
1,380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define COUNT 10
  4.  
  5. int main()
  6. {
  7.     printf("Hello world!\n");
  8.     srand(0);
  9.     while(1)
  10.     {
  11.  
  12.         int array[COUNT];
  13.         populateArray(array,COUNT,0,100);
  14.         printArray(array,COUNT);
  15.         //mergeSort(array,0,COUNT-1);
  16.         //heapSort(array,COUNT);
  17.         //int out[COUNT];
  18.         //countingSort(array,out,COUNT,101);
  19.  
  20.         printf("%d\n",nthOrderStatistics(array,0,COUNT-1,1));
  21.         //printArray(out,COUNT);
  22.         //printArray(array,COUNT);
  23.  
  24.         char c;
  25.         scanf("%c",&c);
  26.     }
  27.     return 0;
  28. }
  29.  
  30. void populateArray(int arr[], int length, int min, int max)
  31. {
  32.     for (int i = 0; i < length ; i++)
  33.     {
  34.         arr[i] = rand() % (max + 1 - min) + min;
  35.     }
  36. }
  37.  
  38. void printArray(int arr[], int length)
  39. {
  40.     printf("[");
  41.     for (int i = 0; i < length ; i++)
  42.     {
  43.         printf("%d",arr[i]);
  44.         if(i < length-1)
  45.         {
  46.             printf(", ");
  47.         }
  48.     }
  49.     printf("]\n");
  50. }
  51.  
  52. void swap(int arr[], int a, int b)
  53. {
  54.     int temp = arr[a];
  55.     arr[a] = arr[b];
  56.     arr[b] = temp;
  57. }
  58.  
  59. void insertSort(int arr[], int length){
  60.     for(int i = 1; i < length; i++){
  61.         int temp = arr[i];
  62.         int j = i - 1;
  63.         while(j >= 0 && arr[j] > temp){
  64.             arr[j+1] = arr[j];
  65.             j--;
  66.         }
  67.         arr[++j] = temp;
  68.     }
  69. }
  70.  
  71. void selectSort(int arr[], int length){
  72.     for(int i = 0; i < length; i++){
  73.         int min = i;
  74.         for(int j = i + 1; j < length; j++){
  75.             if(arr[j] < arr[min]){
  76.                 min = j;
  77.             }
  78.         }
  79.         swap(arr,min,i);
  80.     }
  81. }
  82.  
  83. void bubbleSort(int arr[], int length){
  84.     for(int i = 0; i < length -1 ; i++){
  85.         int last = i;
  86.         for(int j = length-1; j > 0; j--){
  87.             if(arr[j] < arr[j-1]){
  88.                 swap(arr,j,j-1);
  89.                 last = j-1;
  90.             }
  91.         }
  92.         i = last;
  93.     }
  94. }
  95.  
  96. void quickSort(int arr[], int start, int end){
  97.     if(start < end){
  98.         int part = partition(arr,start,end);
  99.         quickSort(arr,start,part-1);
  100.         quickSort(arr,part+1,end);
  101.     }
  102. }
  103.  
  104. int partition(int arr[], int start, int end){
  105.     int pivot = arr[end];
  106.     int pos = start - 1;
  107.  
  108.     for(int i = start; i < end; i++){
  109.         if(arr[i] < pivot){
  110.             swap(arr,++pos,i);
  111.         }
  112.     }
  113.     swap(arr,++pos,end);
  114.  
  115.     return pos;
  116. }
  117.  
  118. void mergeSort(int arr[], int start, int end){
  119.     if(start < end){
  120.         int mid = start + (end - start) / 2;
  121.         mergeSort(arr,start,mid);
  122.         mergeSort(arr,mid+1,end);
  123.         merge(arr,start,mid,end);
  124.     }
  125. }
  126.  
  127. void merge(int arr[], int start, int mid, int end){
  128.     int lengthLeft = mid-start+1;
  129.     int lengthRight = end - mid;
  130.  
  131.     int left[lengthLeft];
  132.     int right[lengthRight];
  133.  
  134.     for(int i = 0; i < lengthLeft; i++){
  135.         left[i] = arr[start+i];
  136.     }
  137.  
  138.     for(int i = 0; i < lengthRight; i++){
  139.         right[i] = arr[i+mid+1];
  140.     }
  141.  
  142.     left[lengthLeft] = 2147483647;
  143.     right[lengthRight] = 2147483647;
  144.  
  145.     int posLeft = 0;
  146.     int posRight = 0;
  147.  
  148.     for(int i = start; i <= end; i++){
  149.         if(left[posLeft] <= right[posRight]){
  150.             arr[i] = left[posLeft++];
  151.         }
  152.         else {
  153.             arr[i] = right[posRight++];
  154.         }
  155.     }
  156. }
  157.  
  158. void heapSort(int arr[], int length){
  159.     buildMaxHeap(arr,length);
  160.     for(int i = length -1 ; i > 0; i--){
  161.         swap(arr,0,i);
  162.         heapify(arr,0,i);
  163.     }
  164. }
  165.  
  166. void heapify(int arr[], int i, int length){
  167.     int left = 2 * i + 1;
  168.     int right = 2 * i + 2;
  169.     int largest = i;
  170.  
  171.     if(left < length && arr[left] > arr[largest]){
  172.         largest = left;
  173.     }
  174.  
  175.     if(right < length && arr[right] > arr[largest]){
  176.         largest = right;
  177.     }
  178.  
  179.     if(largest != i){
  180.         swap(arr,largest,i);
  181.         heapify(arr,largest,length);
  182.     }
  183. }
  184.  
  185. void buildMaxHeap(int arr[], int length){
  186.     for(int i = length / 2; i >= 0; i--){
  187.         heapify(arr,i,length);
  188.     }
  189. }
  190.  
  191. void countingSort(int in[], int out[], int length, int range){
  192.     int counts[range];
  193.  
  194.     for(int i = 0; i < range; i++){
  195.         counts[i] = 0;
  196.     }
  197.  
  198.     for(int i = 0; i < length; i++){
  199.         counts[in[i]] = counts[in[i]] + 1;
  200.     }
  201.  
  202.     for(int i = 1; i < range; i++){
  203.         counts[i] = counts[i] + counts[i-1];
  204.     }
  205.  
  206.  
  207.     for(int i = 0; i < length; i++){
  208.         out[counts[in[i]]-1] = in[i];
  209.         counts[in[i]] = counts[in[i]] - 1;
  210.     }
  211. }
  212.  
  213. int nthOrderStatistics(int arr[], int start, int end, int n){
  214.     if(start == end){
  215.         return arr[start];
  216.     }
  217.  
  218.     int pivot = randomizedPartition(arr,start,end);
  219.     int pivotLocal = pivot - start + 1;
  220.  
  221.     if(pivotLocal == n){
  222.         return arr[pivot];
  223.     }
  224.  
  225.     if(n < pivotLocal){
  226.         return nthOrderStatistics(arr,start,pivot-1,n);
  227.     }
  228.  
  229.     return nthOrderStatistics(arr,pivot+1,end,n-pivotLocal);
  230. }
  231.  
  232.  
  233. int randomizedPartition(int arr[], int start, int end){
  234.  
  235.     int k = rand() % (end + 1 - start) + start;
  236.     swap(arr,k,end);
  237.     return partition(arr,start,end);
  238. }
  239.  
Advertisement
Add Comment
Please, Sign In to add comment