All pastes #793601 Raw Edit

Stuff

public text v1 · immutable
·published 2007-11-22 12:37 UTC
rendered paste body
#include <stdio.h>

void merge(int numbers[], int temp[], int left, int mid, int right);
void m_sort(int numbers[], int temp[], int left, int right);

int main()
{
	int Polje[11] = {3, 5, 15, 28, 30, 6, 10, 14, 22, 43, 50};
	int B[11];
	int i;

	// ispis nesortiranih brojeva
	printf("\nNesortirani brojevi: ");
	for (i = 0; i < 11; i++) 
		printf("%d ", Polje[i]);

	// poziv merge funkciji
	m_sort(Polje, B, 0, 10);

	// ispis sortiranih brojeva
	printf("\nSortirani brojevi: ");
	for (i = 0; i < 11; i++) 
		printf("%d ", Polje[i]);

	// zavrsili smo
	printf("\nKraj\n");
	return 0;
}

void ispis(int numbers[], int len, int left, int right)
{
	int i;

	printf("\nLeft: %d\tRight: %d\tA: ", left, right);
	for (i = 0; i < 11; i++) {
		printf("%d ", numbers[i]);
	}
}

void m_sort(int numbers[], int temp[], int left, int right)
{
	int mid;

	if (right > left) {
		mid = (right + left) / 2;
		m_sort(numbers, temp, left, mid);
		m_sort(numbers, temp, mid+1, right);
		ispis(numbers, right, left, right);
		merge(numbers, temp, left, mid+1, right);
		ispis(numbers, right, left, right);
	}
}

void merge(int numbers[], int temp[], int left, int mid, int right)
{
	int i, left_end, num_elements, tmp_pos;

	left_end = mid - 1;
	tmp_pos = left;
	num_elements = right - left + 1;

	while ((left <= left_end) && (mid <= right)) {
		if (numbers[left] <= numbers[mid]) {
			temp[tmp_pos] = numbers[left];
			tmp_pos = tmp_pos + 1;
			left = left +1;
		}
		else {
			temp[tmp_pos] = numbers[mid];
			tmp_pos = tmp_pos + 1;
			mid = mid + 1;
		}
	}

	while (left <= left_end) {
		temp[tmp_pos] = numbers[left];
		left = left + 1;
		tmp_pos = tmp_pos + 1;
	}

	while (mid <= right) {
		temp[tmp_pos] = numbers[mid];
		mid = mid + 1;
		tmp_pos = tmp_pos + 1;
	}

	for (i = 0; i <= num_elements; i++) {
		numbers[right] = temp[right];
		right = right - 1;
	}
}