-
Notifications
You must be signed in to change notification settings - Fork 0
/
funciones.h
99 lines (81 loc) · 2.02 KB
/
funciones.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#ifndef FUNCIONES_H
#define FUNCIONES_H
#include <stdint.h>
#include <math.h>
static int64_t _w_decimal_to_binary(int dcml, int i, int sum){
if (!dcml) return sum;
return _w_decimal_to_binary(dcml/2,i+1,sum + ((int)pow(10,i)*(dcml%2)));
}
int64_t decimal_to_binary(int dcml){
return _w_decimal_to_binary(dcml,0,0);
}
static int _w_reverse_number(int n,int s){
if (!n) return s;
return _w_reverse_number(n/10,(s*10)+(n%10));
}
int reverse_number(int n){
return _w_reverse_number(n,0);
}
int _w_mcd(int a,int b){
if (!b) return a;
return _w_mcd(b,a%b);
}
int mcd(int a,int b){
if (a > b)
return _w_mcd(a,b);
return _w_mcd(b,a);
}
int _w_pow_recursive(int b,int e,int s){
if (!e) return s;
return _w_pow_recursive(b,e-1,b*s);
}
int pow_recursive(int b,int e){
return _w_pow_recursive(b,e,1);
}
int _w_product(int a,int b, int s){
if (!b || !a) return s;
return _w_product(a,b-1,s+a);
}
int product(int a,int b){
return _w_product(a,b,0);
}
void swap(int* a, int* b){
int c = *a;
*a = *b;
*b = c;
}
int _w_bubble_sort(int* v,int s, int i, int j){
if (i == s) return 1;
if (j == s - i)
return _w_bubble_sort(v,s,i+1,0);
if (v[j] > v[j+1])
swap(&v[j],&v[j+1]);
return _w_bubble_sort(v,s,i,j+1);
}
void bubble_sort(int* v,int s){
_w_bubble_sort(v,s,1,0);
}
int _w_insertion_sort(int* v,int s, int i, int j){
if (i == s) return 1;
if ( j > 0 && v[j-1] > v[j]){
swap(&v[j],&v[j-1]);
return _w_insertion_sort(v,s,i,j-1);
}
return _w_insertion_sort(v,s,i+1,i+1);
}
void insertion_sort(int* v, int s){
_w_insertion_sort(v,s,0,0);
}
int _w_selection_sort(int* v, int s, int i, int j,int min){
if (i == s-1) return 1;
if (j == s)
return _w_selection_sort(v,s,i,i+2,min);
if (v[j] < v[min])
return _w_selection_sort(v,s,i,j+1,j);
swap(&v[min],&v[i]);
return _w_selection_sort(v,s,i+1,i+2,i+1);
}
void selection_sort(int* v, int s){
_w_selection_sort(v,s,0,1,0);
}
#endif