Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <limits.h>
- void populateArray(int arr[], int length, int min, int max);
- #define COUNT 10
- int main()
- {
- //srand(time(NULL));
- srand(0);
- while(1)
- {
- int array[COUNT];
- populateArray(array,COUNT,-100,100);
- printArray(array,COUNT);
- mergeSort(array,0,COUNT-1);
- printArray(array,COUNT);
- char c;
- scanf("%c",&c);
- }
- return 0;
- }
- void populateArray(int arr[], int length, int min, int max)
- {
- for (int i = 0; i < length ; i++)
- {
- arr[i] = rand() % (max + 1 - min) + min;
- }
- }
- void printArray(int arr[], int length)
- {
- printf("[");
- for (int i = 0; i < length ; i++)
- {
- printf("%d",arr[i]);
- if(i < length-1)
- {
- printf(", ");
- }
- }
- printf("]\n");
- }
- void mergeSort(int arr[], int start, int end)
- {
- if(start < end)
- {
- int mid = start + (end-start)/2;
- mergeSort(arr,start,mid);
- mergeSort(arr,mid+1,end);
- merge(arr,start,mid,end);
- }
- }
- void merge(int arr[], int start, int mid, int end)
- {
- int lengthL = mid-start+1;
- int lengthR = end-mid;
- int left[lengthL];
- int right[lengthR];
- for(int i = 0; i < lengthL; i++)
- {
- left[i] = arr[start+i];
- }
- for(int i = 0; i < lengthR; i++)
- {
- right[i] = arr[mid+i+1];
- }
- printf("L: %d %d %d -", start, mid, end);
- printArray(left,lengthL);
- printf("R: %d %d %d -",start, mid, end);
- printArray(right,lengthR);
- left[lengthL] = INT_MAX;
- right[lengthR] = INT_MAX;
- int i = 0;
- int j = 0;
- for(int k = start; k <= end; k++)
- {
- if(left[i] <= right[j])
- {
- arr[k] = left[i];
- i++;
- }
- else
- {
- arr[k] = right[j];
- j++;
- }
- }
- printf("A: %d %d %d -",start, mid, end);
- printArray(arr,COUNT);
- }
- void quickSort(int arr[], int start, int end)
- {
- if(start < end)
- {
- int part = partition(arr,start,end);
- quickSort(arr,start,part-1);
- quickSort(arr,part+1,end);
- }
- }
- int partition(int arr[], int start, int end)
- {
- int pivot = arr[end];
- int i = start-1;
- int j;
- for(j = start; j < end; j++)
- {
- if(arr[j] <= pivot)
- {
- i++;
- swap(arr,i,j);
- }
- }
- swap(arr,i+1,end);
- return i+1;
- }
- void swap(int arr[], int a, int b)
- {
- int temp = arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement