forked from 131/lab4_sort
функции insert_sort и merge
This commit is contained in:
43
sort.c
43
sort.c
@@ -83,34 +83,33 @@ _merge(int *tmp, int *a, int *b, int *end)
|
|||||||
* Функция для слияния двух отсортированных массивов в один.
|
* Функция для слияния двух отсортированных массивов в один.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int *pa = a; // указатель на первый массив
|
int a1 = 0, b1 = 0, tmp1 = 0;
|
||||||
int *pb = b; // указатель на второй массив
|
int ra = b - a, rb = end - b;
|
||||||
int *pt = tmp; // указатель на временный массив
|
while (ra > a1 && rb > b1)
|
||||||
int *end1 = b; // конец первого массива
|
{
|
||||||
int *end2 = end; // конец второго массива
|
if (a[a1] < b[b1])
|
||||||
|
{
|
||||||
while (pa < end1 && pb < end2) {
|
tmp[tmp1++] = a[a1++];
|
||||||
if (*pa <= *pb) {
|
}
|
||||||
*pt++ = *pa++;
|
else
|
||||||
} else {
|
{
|
||||||
*pt++ = *pb++;
|
tmp[tmp1++] = b[b1++];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
while (ra != a1)
|
||||||
while (pa < end1) {
|
{
|
||||||
*pt++ = *pa++;
|
tmp[tmp1] = a[a1];
|
||||||
|
a1++;
|
||||||
|
tmp1++;
|
||||||
}
|
}
|
||||||
|
while (rb != b1)
|
||||||
while (pb < end2) {
|
{
|
||||||
*pt++ = *pb++;
|
tmp[tmp1] = b[b1];
|
||||||
}
|
b1++;
|
||||||
|
tmp1++;
|
||||||
for (pt = tmp; a < end; ) {
|
|
||||||
*a++ = *pt++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_merge_sort_int(int *tmp, int *arr, size_t n)
|
_merge_sort_int(int *tmp, int *arr, size_t n)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user