Skip to content

Commit 2c53568

Browse files
committed
up
1 parent b2a3b40 commit 2c53568

File tree

7 files changed

+135
-0
lines changed

7 files changed

+135
-0
lines changed

MergeSort.c

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
void merge(int arr[], int p, int q, int r) {
5+
// Create L ← A[p..q] and M ← A[q+1..r]
6+
int n1 = q - p + 1;
7+
int n2 = r - q;
8+
9+
int L[n1], M[n2];
10+
11+
for (int i = 0; i < n1; i++) L[i] = arr[p + i];
12+
for (int j = 0; j < n2; j++) M[j] = arr[q + 1 + j];
13+
14+
// Maintain current index of sub-arrays and main array
15+
int i, j, k;
16+
i = 0;
17+
j = 0;
18+
k = p;
19+
20+
// Until we reach either end of either L or M, pick larger among
21+
// elements L and M and place them in the correct position at A[p..r]
22+
while (i < n1 && j < n2) {
23+
if (L[i] <= M[j]) {
24+
arr[k] = L[i];
25+
i++;
26+
} else {
27+
arr[k] = M[j];
28+
j++;
29+
}
30+
k++;
31+
}
32+
33+
// When we run out of elements in either L or M,
34+
// pick up the remaining elements and put in A[p..r]
35+
while (i < n1) {
36+
arr[k] = L[i];
37+
i++;
38+
k++;
39+
}
40+
41+
while (j < n2) {
42+
arr[k] = M[j];
43+
j++;
44+
k++;
45+
}
46+
}
47+
48+
void merge_sort(int arr[], int l, int r) {
49+
if (l < r) {
50+
// m is the point where the array is divided into two subarrays
51+
int m = l + (r - l) / 2;
52+
53+
merge_sort(arr, l, m);
54+
merge_sort(arr, m + 1, r);
55+
56+
// Merge the sorted subarrays
57+
merge(arr, l, m, r);
58+
}
59+
}
60+
61+
int main(int argc, char** argv) {
62+
int arr[] = { 5, 4, 3, 2, 1 };
63+
int n = sizeof(arr) / sizeof(arr[0]);
64+
65+
merge_sort(arr, 0, n - 1);
66+
67+
for (int i = 0; i < n; i++) {
68+
printf("%d ", arr[i]);
69+
}
70+
71+
return 0;
72+
}

binary_search.c

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <math.h>
4+
5+
// int binary_search(int* arr, int looking_for, int low, int high) {
6+
// int middle = (int) (high + low) / 2;
7+
// if (low == high && low == middle && arr[low] == looking_for) {
8+
// return low;
9+
// }
10+
// return -1;
11+
// }
12+
13+
int BinarySearch(int* arr, int looking_for, int low, int high) {
14+
int middle = (int) (high + low) / 2;
15+
if (low == high && low == middle && arr[low] == looking_for) {
16+
return low;
17+
}
18+
if (arr[middle] == looking_for) {
19+
return middle;
20+
}
21+
if (arr[middle] > looking_for) {
22+
return BinarySearch(arr, looking_for, low, middle);
23+
}
24+
if (arr[middle] < looking_for) {
25+
return BinarySearch(arr, looking_for, middle, high);
26+
}
27+
return -1;
28+
}
29+
30+
int binarysearch_rec(int* arr, int low, int high, int looking_for) {
31+
if (low <= high) {
32+
int mid = (int) ceil( (low+high) / 2 );
33+
if (looking_for == arr[mid]) return mid;
34+
if (looking_for < arr[mid]) return binarysearch_rec(arr, low, mid-1, looking_for);
35+
if (looking_for > arr[mid]) return binarysearch_rec(arr, mid+1, high, looking_for);
36+
}
37+
return -1;
38+
}
39+
40+
int main () {
41+
42+
int arr[] = { 1, 3, 5, 9, 13, 17, 25 };
43+
int n = sizeof(arr) / sizeof(arr[0]);
44+
int looking_for = 17;
45+
// int looking_for = 222;
46+
47+
// int found_key = BinarySearch(arr, looking_for, 0, n);
48+
int found_key = binarysearch_rec(arr, looking_for, 0, n);
49+
if (found_key == -1) {
50+
printf("Error: sorry, we are unable to find that value in the array!\n");
51+
} else {
52+
printf("We found the %d value at arr[%d]\n");
53+
}
54+
55+
return 0;
56+
}

binary_sort.c

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
void binary_sort
5+
int main () {
6+
return 0;
7+
}

bins.exe

74.8 KB
Binary file not shown.

bs.exe

74.8 KB
Binary file not shown.

ms.exe

74.8 KB
Binary file not shown.

ss.exe

74.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)