diff options
| author | krolyxon <krolyxon@tutanota.com> | 2023-09-01 11:31:52 +0530 |
|---|---|---|
| committer | krolyxon <krolyxon@tutanota.com> | 2023-09-01 11:31:52 +0530 |
| commit | 864708a6deec0443097111c6d0ffab47941fdac0 (patch) | |
| tree | 3ee20a9d36da1a49a636176fe1e221f2b8163958 /src | |
| parent | f8fc421e0b0d988e3c85c3a7e4b33a532f3c2827 (diff) | |
add radix sort
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 6 | ||||
| -rw-r--r-- | src/sort.c | 38 | ||||
| -rw-r--r-- | src/sort.h | 2 |
3 files changed, 43 insertions, 3 deletions
@@ -8,7 +8,7 @@ const int EASY_SCORE_DECREMENT = 10; const int MEDIUM_SCORE_DECREMENT = 20; const int LOWER = 1; -const int UPPER = 3; +const int UPPER = 4; typedef enum Difficulty { Easy, @@ -56,7 +56,9 @@ int main(int argc, char *argv[]) { getarr(size); selectionsort(list, size); break; - // case 4: radixsort(list); break; + case 4: + radixsort(list, size); + break; default: break; } @@ -39,3 +39,41 @@ void insertionsort(int a[], int n) { printf("\n"); } } + +int get_max(int a[], int n) { + int max = a[0]; + int i; + for (i = 1; i < n; i++) + if (a[i] > max) + max = a[i]; + return max; +} +void radixsort(int a[], int n) { + int bucket[10][10], bucket_cnt[10]; + int i, j, k, r, NOP = 0, divisor = 1, lar, pass; + lar = get_max(a, n); + while (lar > 0) { + NOP++; + lar /= 10; + } + for (pass = 0; pass < NOP; pass++) { + for (i = 0; i < 10; i++) { + bucket_cnt[i] = 0; + } + for (i = 0; i < n; i++) { + r = (a[i] / divisor) % 10; + bucket[r][bucket_cnt[r]] = a[i]; + bucket_cnt[r] += 1; + } + i = 0; + for (k = 0; k < 10; k++) { + for (j = 0; j < bucket_cnt[k]; j++) { + a[i] = bucket[k][j]; + i++; + } + } + divisor *= 10; + printarr(a, n); + printf("\n"); + } +} @@ -4,4 +4,4 @@ void bubblesort(int a[], int n); void selectionsort(int a[], int n); void insertionsort(int a[], int n); -void radixsort(int a[]); +void radixsort(int a[], int n); |
