diff --git a/Searches/fibonacciSearch.c b/Searches/fibonacciSearch.c new file mode 100644 index 00000000..297f192d --- /dev/null +++ b/Searches/fibonacciSearch.c @@ -0,0 +1,68 @@ +int fibMonaccianSearch(int arr[], int x, int n) +{ + /* Initialize fibonacci numbers */ + int fibMMm2 = 0; // (m-2)'th Fibonacci No. + int fibMMm1 = 1; // (m-1)'th Fibonacci No. + int fibM = fibMMm2 + fibMMm1; // m'th Fibonacci + + /* fibM is going to store the smallest Fibonacci + Number greater than or equal to n */ + while (fibM < n) + { + fibMMm2 = fibMMm1; + fibMMm1 = fibM; + fibM = fibMMm2 + fibMMm1; + } + + // Marks the eliminated range from front + int offset = -1; + + /* while there are elements to be inspected. Note that + we compare arr[fibMm2] with x. When fibM becomes 1, + fibMm2 becomes 0 */ + while (fibM > 1) + { + // Check if fibMm2 is a valid location + int i = min(offset+fibMMm2, n-1); + + /* If x is greater than the value at index fibMm2, + cut the subarray array from offset to i */ + if (arr[i] < x) + { + fibM = fibMMm1; + fibMMm1 = fibMMm2; + fibMMm2 = fibM - fibMMm1; + offset = i; + } + + /* If x is greater than the value at index fibMm2, + cut the subarray after i+1 */ + else if (arr[i] > x) + { + fibM = fibMMm2; + fibMMm1 = fibMMm1 - fibMMm2; + fibMMm2 = fibM - fibMMm1; + } + + /* element found. return index */ + else return i; + } + + /* comparing the last element with x */ + if(fibMMm1 && arr[offset+1]==x)return offset+1; + + /*element not found. return -1 */ + return -1; +} + + +int main(void) +{ + int arr[] = {10, 22, 35, 40, 45, 50, 80, 82, + 85, 90, 100}; + int n = sizeof(arr)/sizeof(arr[0]); + int x = 85; + printf("Found at index: %d", + fibMonaccianSearch(arr, x, n)); + return 0; +} diff --git a/Sorts/shellSort.c b/Sorts/shellSort.c new file mode 100644 index 00000000..e81cad95 --- /dev/null +++ b/Sorts/shellSort.c @@ -0,0 +1,48 @@ +#include +#include +#include + +void shellSort(int array[], int value){ + int i = value; + int j, k, tmp; + for (i = value / 2; i > 0; i = i / 2){ + for (j = i; j < value; j++){ + for(k = j - i; k >= 0; k = k - i){ + if (array[k+i] >= array[k]){ + break; + } + else{ + tmp = array[k]; + array[k] = array[k+i]; + array[k+i] = tmp; + } + } + } + } +} + + +int main(){ + + int array[20]; + int range = 500; + for(int i = 0; i < 100; i++){ + array[i] = rand() % range + 1; + } + int size = sizeof array / sizeof array[0]; + + + + clock_t start = clock(); + shellSort(array,size); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + + printf("Data Sorted\n"); + printf("%s\n", "Shell Sort Big O Notation:\n--> Best Case: O(n log(n))\n--> Average Case: depends on gap sequence\n--> Worst Case: O(n)\n"); + printf("Time spent sorting: %f\n", time_spent); + + return 0; +} +