so_sort_utils.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* so_sort_utils.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2022/11/20 21:55:36 by gychoi #+# #+# */ 9 /* Updated: 2022/12/04 13:39:56 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "push_swap.h" 14 15 static void sort_three(t_deque *deque_a) 16 { 17 if (deque_a->head->data > deque_a->head->next->data 18 && deque_a->head->data > deque_a->tail->data) 19 ra(deque_a); 20 else if (deque_a->head->next->data > deque_a->head->data 21 && deque_a->head->next->data > deque_a->tail->data) 22 rra(deque_a); 23 if (deque_a->head->data > deque_a->head->next->data) 24 sa(deque_a); 25 } 26 27 void sort_small(t_deque *deque_a, t_deque *deque_b, int size) 28 { 29 if (size == 1) 30 return ; 31 else if (size == 2) 32 sa(deque_a); 33 else if (size == 3) 34 sort_three(deque_a); 35 else 36 { 37 while (deque_a->size > 3) 38 pb(deque_a, deque_b); 39 sort_three(deque_a); 40 greedy_sort(deque_a, deque_b); 41 sort_finalize(deque_a); 42 } 43 } 44 45 void sort_finalize(t_deque *deque_a) 46 { 47 int min; 48 int index; 49 50 min = deque_min_data(deque_a); 51 index = find_best_index_min_mid(deque_a, min); 52 if (index < 0) 53 { 54 index *= -1; 55 while (index--) 56 rra(deque_a); 57 } 58 else 59 { 60 while (index--) 61 ra(deque_a); 62 } 63 } 64 65 void array_sort(int *array, int size) 66 { 67 int i; 68 int j; 69 int tmp; 70 71 i = 0; 72 while (i < size) 73 { 74 j = 0; 75 while (j < size - 1) 76 { 77 if (array[j] > array[j + 1]) 78 { 79 tmp = array[j]; 80 array[j] = array[j + 1]; 81 array[j + 1] = tmp; 82 } 83 j++; 84 } 85 i++; 86 } 87 }