Skip to content

Commit 22abc39

Browse files
Write a function that sorts an array of integers in ascending order using the Shell sort algorithm, using the Knuth sequence. Prototype: void shell_sort(int *array, size_t size);
1 parent 31f352a commit 22abc39

File tree

1 file changed

+28
-33
lines changed

1 file changed

+28
-33
lines changed

100-shell_sort.c

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,34 @@
11
#include "sort.h"
22

3+
void insertion_sort(int *, long int, long int, size_t);
4+
35
/**
4-
* shell_sort - Sorts an array of integers in ascending order using Shell sort
5-
* @array: The array to be sorted
6-
* @size: The size of the array
7-
*/
6+
* shell_sort - shell sort algorithm
7+
*
8+
* @array: array to sort
9+
* @size: size of array
10+
*/
811
void shell_sort(int *array, size_t size)
912
{
10-
size_t gap = 1, i, j;
11-
int temp;
12-
13-
if (array == NULL || size < 2)
14-
return;
15-
16-
while (gap < size / 3)
17-
gap = gap * 3 + 1;
18-
19-
while (gap >= 1)
20-
{
21-
for (i = gap; i < size; i++)
22-
{
23-
temp = array[i];
24-
j = i;
25-
26-
while (j >= gap && array[j - gap] > temp)
27-
{
28-
array[j] = array[j - gap];
29-
j -= gap;
30-
}
31-
32-
array[j] = temp;
33-
}
34-
35-
print_array(array, size);
36-
37-
gap /= 3;
38-
}
13+
long int n = 1;
14+
long int i, k, tmp;
15+
16+
if (size < 2)
17+
return;
18+
19+
while (n < (long int)size / 3)
20+
n = n * 3 + 1;
21+
22+
while (n > 0)
23+
{
24+
for (i = n; i < (long int) size; i++)
25+
{
26+
tmp = array[i];
27+
for (k = i; k >= n && array[k - n] > tmp; k = k - n)
28+
array[k] = array[k - n];
29+
array[k] = tmp;
30+
}
31+
print_array(array, size);
32+
n = (n - 1) / 3;
33+
}
3934
}

0 commit comments

Comments
 (0)