Skip to content

Commit 902eef0

Browse files
authored
Merge pull request kelvins#248 from andersonhsporto/radix-sort
Add: radix sort in ANSI C
2 parents c7b744b + e228db1 commit 902eef0

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -3087,8 +3087,8 @@ In order to achieve greater coverage and encourage more people to contribute to
30873087
<tr>
30883088
<td><a href="https://en.wikipedia.org/wiki/Radix_sort">Radix Sort</a></td>
30893089
<td> <!-- C -->
3090-
<a href="./CONTRIBUTING.md">
3091-
<img align="center" height="25" src="./logos/github.svg" />
3090+
<a href="./src/c/RadixSort.c">
3091+
<img align="center" height="25" src="./logos/c.svg" />
30923092
</a>
30933093
</td>
30943094
<td> <!-- C++ -->

src/c/RadixSort.c

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <stdio.h>
2+
3+
void print_array(int array[], int size)
4+
{
5+
printf("[ ");
6+
for (int i = 0; i < size; i++)
7+
{
8+
printf("%d ", array[i]);
9+
}
10+
printf("]\n");
11+
}
12+
13+
int get_max(int array[], int size)
14+
{
15+
int max = array[0];
16+
for (int i = 1; i < size; i++)
17+
{
18+
if (array[i] > max)
19+
max = array[i];
20+
}
21+
return max;
22+
}
23+
24+
void radix_sort(int array[], int size)
25+
{
26+
int i;
27+
int semi_sorted[size];
28+
int significant_digit = 1;
29+
int largest_number = get_max(array, size);
30+
31+
while (largest_number / significant_digit > 0)
32+
{
33+
int bucket[10] = {0};
34+
for (i = 0; i < size; i++)
35+
{
36+
bucket[(array[i] / significant_digit) % 10]++;
37+
}
38+
for (i = 1; i < 10; i++)
39+
{
40+
bucket[i] += bucket[i - 1];
41+
}
42+
for (i = size - 1; i >= 0; i--)
43+
{
44+
semi_sorted[--bucket[(array[i] / significant_digit) % 10]] = array[i];
45+
}
46+
for (i = 0; i < size; i++)
47+
{
48+
array[i] = semi_sorted[i];
49+
}
50+
significant_digit *= 10;
51+
}
52+
}
53+
54+
int main()
55+
{
56+
int array[10] = {45, 75, 89, 12, 34, 9, 67, 23, 90, 11};
57+
printf("Unsorted Array\n");
58+
print_array(array, 10);
59+
60+
radix_sort(array, 10);
61+
62+
printf("Sorted Array\n");
63+
print_array(array, 10);
64+
return 0;
65+
}

0 commit comments

Comments
 (0)