Всем, привет.
Решил подучить алгоритмы, и писать их на чистом С, потому что и сам C знаю немного, но тоже хочу подтянуть. Решил начать с написания алгоритмов.
Уже несколько дней бьюсь надо merge sort, делаю по псевдокоду описанному в Introduction to Algorithms.
void
merge(int *array, int start, int mid, int end)
{
int leftLen = mid - start,
rightLen = end - mid,
left[leftLen], right[rightLen],
i, j, k;
for (i = 0; i < leftLen; i++) {
left[i] = array[start+i];
}
for (j = 0; j < rightLen; j++) {
right[j] = array[mid+j];
}
i = 0;
j = 0;
for (k = start; k < end; k++) {
if ((i < leftLen && left[i] < right[j]) || j >= rightLen) {
array[k] = left[i];
i++;
} else {
array[k] = right[j];
j++;
}
}
}
void mergeSort(int *array, int start, int end)
{
int mid = (start + end) / 2;
if (start < end) {
mergeSort(array, start, mid);
mergeSort(array, mid+1, end);
merge(array, start, mid, end);
}
}
int
main(int argc, const char *argv[])
{
int array[] = {3,2,6,4,1,8,7,9,5},
arrayLen = sizeof(array)/sizeof(int);
mergeSort(array, 0, arrayLen);
}
Буду признателен за помощь.