Just a couple small c programs.

mysort.c 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <stddef.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <fcntl.h>
  5. int counter;
  6. unsigned int *resize_array(unsigned int *a, size_t new_size)
  7. {
  8. unsigned int *save;
  9. save = realloc(a, new_size);
  10. if (save == NULL) {
  11. fprintf(stderr, "Memory exhuasted\n");
  12. exit(EXIT_FAILURE);
  13. }
  14. return save;
  15. }
  16. void swap(unsigned int *a, unsigned int *b){
  17. unsigned int old_a = *a;
  18. *a = *b;
  19. *b = old_a;
  20. }
  21. int partition(unsigned int *array, int left, int right, int pivot){
  22. unsigned int pivot_value = array[pivot];
  23. swap(&array[pivot], &array[right]);
  24. int storeIndex = left;
  25. for(int i = left; i < right; i++){
  26. if (array[i] < pivot_value){
  27. swap(&array[i], &array[storeIndex]);
  28. storeIndex++;
  29. }
  30. }
  31. swap(&array[storeIndex], &array[right]);
  32. return storeIndex;
  33. }
  34. void quicksort(unsigned int *array, int left, int right){
  35. if (left < right){
  36. int pivot = right;
  37. pivot = partition(array, left, right, pivot);
  38. quicksort(array, left, pivot - 1);
  39. quicksort(array, pivot + 1, right);
  40. }
  41. }
  42. int main()
  43. {
  44. int temp_size = 50;
  45. int size = 1;
  46. unsigned int *numbers = malloc(size * sizeof *numbers);
  47. unsigned int *temp = malloc(temp_size * sizeof *temp);
  48. int ret_val;
  49. /// Loop through stdin stream grabbing `temp_size` numbers each iteration
  50. while ((ret_val = fread(temp, sizeof *temp, temp_size, stdin))){
  51. // Should not happen if EOF has been reached/we have loaded all data
  52. if (ret_val != 0){
  53. int new_size = size - 1 + ret_val;
  54. numbers = resize_array(numbers, new_size * sizeof *numbers);
  55. int temp_count = 0;
  56. for(int i = size - 1; i < new_size; i++){
  57. numbers[i] = temp[temp_count++];
  58. }
  59. size = new_size;
  60. }
  61. }
  62. quicksort(numbers, 0, size - 1);
  63. for (int i = 0; i < size; i++){
  64. printf("%i\n", numbers[i]);
  65. }
  66. free(temp);
  67. free(numbers);
  68. return 0;
  69. }