- Search algorithm
- Space complexity (1)
- Linear search algorithm
- Binary search algorithm
- Jump search algorithm
- Interpolation search algorithm
- Exponential search algorithm
0. Linear search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 0-main.c 0-linear.c -o 0-linear
1. Binary search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 1-main.c 1-binary.c -o 1-binary
3. Big O #1
What is the space complexity
(worst case) of an iterative linear search algorithm in an array of size n
?
6. Big O #4
- What is the space complexity of this function / algorithm?
int **allocate_map(int n, int m)
{
int **map;
map = malloc(sizeof(int *) * n);
for (size_t i = 0; i < n; i++)
{
map[i] = malloc(sizeof(int) * m);
}
return (map);
}
7. Jump search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 100-main.c 100-jump.c -lm -o 100-jump
8. Big O #5
What is the time complexity
(average case) of a jump search in an array of size n
, using step = sqrt(n)
?
9. Interpolation search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 102-main.c 102-interpolation.c -o 102-interpolation
10. Exponential search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 103-main.c 103-exponential.c -o 103-exponential
11. Advanced binary search
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 104-main.c 104-advanced_binary.c -o 104-advanced_binary
12. Jump search in a singly linked list
wilfried@0x1E-search_algorithms$ cat 105-main.c
#include <stdio.h>
#include <stdlib.h>
#include "search_algos.h"
listint_t *create_list(int *array, size_t size);
void print_list(const listint_t *list);
void free_list(listint_t *list);
/**
* main - Entry point
*
* Return: Always EXIT_SUCCESS
*/
int main(void)
{
listint_t *list, *res;
int array[] = {
0, 1, 2, 3, 4, 7, 12, 15, 18, 19, 23, 53, 61, 62, 76, 99
};
size_t size = sizeof(array) / sizeof(array[0]);
list = create_list(array, size);
print_list(list);
res = jump_list(list, size, 53);
printf("Found %d at index: %lu\n\n", 53, res->index);
res = jump_list(list, size, 2);
printf("Found %d at index: %lu\n\n", 2, res->index);
res = jump_list(list, size, 999);
printf("Found %d at index: %p\n", 999, (void *) res);
free_list(list);
return (EXIT_SUCCESS);
}
wilfried@0x1E-search_algorithms$ gcc -Wall -Wextra -Werror -pedantic -std=gnu89 105-main.c 105-jump_list.c listint/*.c -lm -o 105-jump
wilfried@0x1E-search_algorithms$ ./105-jump
List :
Index[0] = [0]
Index[1] = [1]
Index[2] = [2]
Index[3] = [3]
Index[4] = [4]
Index[5] = [7]
Index[6] = [12]
Index[7] = [15]
Index[8] = [18]
Index[9] = [19]
Index[10] = [23]
Index[11] = [53]
Index[12] = [61]
Index[13] = [62]
Index[14] = [76]
Index[15] = [99]
Value checked at index [4] = [4]
Value checked at index [8] = [18]
Value checked at index [12] = [61]
Value found between indexes [8] and [12]
Value checked at index [8] = [18]
Value checked at index [9] = [19]
Value checked at index [10] = [23]
Value checked at index [11] = [53]
Found 53 at index: 11
Value checked at index [4] = [4]
Value found between indexes [0] and [4]
Value checked at index [0] = [0]
Value checked at index [1] = [1]
Value checked at index [2] = [2]
Found 2 at index: 2
Value checked at index [4] = [4]
Value checked at index [8] = [18]
Value checked at index [12] = [61]
Value checked at index [15] = [99]
Value found between indexes [12] and [15]
Value checked at index [12] = [61]
Value checked at index [13] = [62]
Value checked at index [14] = [76]
Value checked at index [15] = [99]
Found 999 at index: (nil)
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 105-main.c 105-jump_list.c listint/*.c -lm -o 105-jump
13. Linear search in a skip list
wilfried@0x1E-search_algorithms$ cat 106-main.c
#include <stdio.h>
#include <stdlib.h>
#include "search_algos.h"
skiplist_t *create_skiplist(int *array, size_t size);
void print_skiplist(const skiplist_t *list);
void free_skiplist(skiplist_t *list);
/**
* main - Entry point
*
* Return: Always EXIT_SUCCESS
*/
int main(void)
{
skiplist_t *list, *res;
int array[] = {
0, 1, 2, 3, 4, 7, 12, 15, 18, 19, 23, 53, 61, 62, 76, 99
};
size_t size = sizeof(array) / sizeof(array[0]);
list = create_skiplist(array, size);
print_skiplist(list);
res = linear_skip(list, 53);
printf("Found %d at index: %lu\n\n", 53, res->index);
res = linear_skip(list, 2);
printf("Found %d at index: %lu\n\n", 2, res->index);
res = linear_skip(list, 999);
printf("Found %d at index: %p\n", 999, (void *) res);
free_skiplist(list);
return (EXIT_SUCCESS);
}
wilfried@0x1E-search_algorithms$ gcc -Wall -Wextra -Werror -pedantic -std=gnu89 106-main.c 106-linear_skip.c skiplist/*.c -lm -o 106-linear
wilfried@0x1E-search_algorithms$ ./106-linear
List :
Index[0] = [0]
Index[1] = [1]
Index[2] = [2]
Index[3] = [3]
Index[4] = [4]
Index[5] = [7]
Index[6] = [12]
Index[7] = [15]
Index[8] = [18]
Index[9] = [19]
Index[10] = [23]
Index[11] = [53]
Index[12] = [61]
Index[13] = [62]
Index[14] = [76]
Index[15] = [99]
Express lane :
Index[0] = [0]
Index[4] = [4]
Index[8] = [18]
Index[12] = [61]
Value checked at index [4] = [4]
Value checked at index [8] = [18]
Value checked at index [12] = [61]
Value found between indexes [8] and [12]
Value checked at index [8] = [18]
Value checked at index [9] = [19]
Value checked at index [10] = [23]
Value checked at index [11] = [53]
Found 53 at index: 11
Value checked at index [4] = [4]
Value found between indexes [0] and [4]
Value checked at index [0] = [0]
Value checked at index [1] = [1]
Value checked at index [2] = [2]
Found 2 at index: 2
Value checked at index [4] = [4]
Value checked at index [8] = [18]
Value checked at index [12] = [61]
Value found between indexes [12] and [15]
Value checked at index [12] = [61]
Value checked at index [13] = [62]
Value checked at index [14] = [76]
Value checked at index [15] = [99]
Found 999 at index: (nil)
- Compile the code this way:
gcc -Wall -Wextra -Werror -pedantic -std=gnu89 106-main.c 106-linear_skip.c skiplist/*.c -lm -o 106-linear
14. Big O #6
What is the time complexity
(average case) of a jump search in a singly linked list of size n
, using step = sqrt(n)
?
15. Big O #7
What is the time complexity
(average case) of a jump search in a skip list of size n
, with an express lane using step = sqrt(n)
?