• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.

Merge Sort Algoritması İle Sıralama Yapma

ByOnur58

Kayıtlı Üye
Forum Yaşı
11 Yıl 5 Ay
Mesajlar
2,114
Tepkime puanı
10
Kod:
#include <stdio.h>
#include <stdlib.h>
 
#define A_SIZE 10
 
**** merge_sort(int *p, int size);
**** print_array(int *p, int size);
 
 
int main(****)
{
int a[A_SIZE] = {24, 8, 12, -99, 87, -6, 0, 587, -56, 44225};
 
print_array(a, A_SIZE);
merge_sort(a, A_SIZE);
print_array(a, A_SIZE);
getchar();
getchar();
return 0;
}
/**************************************/
**** merge_sort (int *p, int size)
{
int *t, *q, *buf;
int   left, len, count1, count2, source1, source2, dest;
 
if (size <= 1)
return;
buf = q = (int *) malloc(size * sizeof(int));
if (buf == NULL) {
printf("not enough memory!");
exit(EXIT_FAILURE);
}
len = 1;
 
do {
left = size;
source1 = dest = 0; source2 = len;
do {
left -= count1 = (left >= len) ? len : left;
left -= count2 = (left >= len) ? len : left;
while (count1 > 0 && count2 > 0) {
if (p[source1] < p[source2]) {
q[dest++] = p[source1++];
count1--;
}
else {
q[dest++] = p[source2++];
count2--;
}
}
while (--count1 >= 0)
q[dest++] = p[source1++];
while (--count2 >= 0)
q[dest++] = p[source2++];
source1 += len; source2 += len;
} while (left > 0);
t = p;
p = q;
q = t;
len *= 2;
} while (len < size);
if (p == buf)
while (--size >= 0)
q[size] = p[size];
free(buf);
}
/**************************************/
**** print_array(int *p, int size)
{
int i;
 
for (i = 0; i < size; i++)
printf("%d ", p[i]);
putchar('\n');
 
 
}
 
Geri
Üst