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
|
#include <stdio.h>
void print_array(int array[], int len);
void buble_sort(int array[], int len);
void buble_sort_rec(int array[], int len);
void swap(int *to, int *from);
int
main(void)
{
int array[] = {4, 2, 1, 7, 8, 9, 6, 0, 3, 5};
print_array(array, sizeof(array)/sizeof(int));
buble_sort(array, sizeof(array)/sizeof(int));
print_array(array, sizeof(array)/sizeof(int));
return 0;
}
void
print_array(int array[], int len)
{
while (len--)
printf("%d, ", *array++);
printf("\n");
}
void
buble_sort(int array[], int len)
{
int active, len_cp = len;
while (--len_cp) {
if (len_cp == len - 1) {
active = 0;
}
if (array[len_cp] < array[len_cp - 1]) {
swap(&array[len_cp], &array[len_cp - 1]);
active = 1;
}
if (len_cp == 1 && active)
len_cp = len;
}
}
void
buble_sort_rec(int array[], int len)
{
int active = 0, len_cp = len;
while (--len_cp > 0)
if (array[len_cp] < array[len_cp - 1]) {
swap(&array[len_cp], &array[len_cp - 1]);
active = 1;
}
if (active)
buble_sort(array, len);
else
return;
}
void
swap(int *to, int *from)
{
int buff = *to;
*to = *from;
*from = buff;
}
|