Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- void place_sort(int* v, int l) {
- // Find min, max of array
- int min, max;
- for (int i = 0; i < l; i++) {
- if (v[i] > max) {
- max = v[i];
- } else if (v[i] < min) {
- min = v[i];
- }
- }
- // Construct array
- int items = abs(max-min);
- int* vals = (int*) calloc(items, sizeof(int));
- if(vals == NULL) {
- printf("Not enough memory!");
- exit(-1);
- }
- // Sort
- for (int i = 0; i < l; i++) {
- vals[v[i] - min]++;
- }
- // Move back into array
- int n = 0; // vals index (relative value of element)
- for (int i = 0; i < l; i++) {
- while(vals[n] <= 0) {
- n++;
- }
- v[i] = n + min;
- vals[n]--;
- }
- // Free temperary array
- free(vals);
- }
- void print_array(int* v, int l) {
- for (int i = 0; i < l; i++) printf("%8d\n", v[i]);
- }
- int main(int argc, char* argv[]) {
- if (argc != 3) {
- printf("Usage:\n");
- printf("%s 'Size of array' 'Maximum value'\n", argv[0]);
- exit(0);
- }
- int l = atoi(argv[1]); // Size of array
- int t = atoi(argv[2]); // Modulo value for array
- printf("Params: %d %d\n", l, t);
- // Create random array
- srand(time(NULL));
- int* A = (int*) calloc(l, sizeof(int));
- for (int i = 0; i < l; i++) A[i] = rand() % t;
- // Sort
- place_sort(A, l);
- // Print array
- print_array(A, l);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement