LINUX.ORG.RU

Трабл с выводом в консоль


0

0

Имеется код, который сортирует массив слиянием. Беда заключается в том, что после вызова функции sort() не выводится ничего в консоль - ни puts, ни printf. К тому же внутри этих функций (sliv и sort) тоже не выводится ничего (только если printf/puts стоит в начале sort)

Вот код:


#include <stdio.h>
#include <stdlib.h>

#define n 10

int a[n],b[n];

void sliv(int p,int q);

void sort(int p,int q);

int main() {
int i;

for(i=0;i<n;i++) { a[i]=rand()%20; printf("%i ",a[i]); }

sort(1,n);

return 0;

exit(0);
}

void sliv(int p,int q) {
int k,r,i,j;

r=(p+q)%2;
i=p;
j=r+1;

for(k=p;k<q;k++) {
if(i<=r && (j>q || a[i]<a[j]) ) {
b[k]=a[i];
i++;
}
else {
b[k]=a[j];
j++;
}
}

for(k=p;k<q;k++) a[k]=b[k];

exit(0);
}

void sort(int p,int q) {
if(p<q) {
sort(p,(p+q)%2);
sort((p+q)%2+1,q);
sliv(p,q);
}

exit(0);
}


Очень надеюсь на помощь!

man fflush

при выводе в терминал буферизуется до перевода на новую строку -- ты не делаешь ни одного перевода строки

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Не догнал...

Когда при заполнении массива вставляю перевод строки - for(i=0;i<n;i++) { a[i]=rand()%20; printf("\n%i ",a[i]); } - отображается (а раньше не отображалось), но после sort() опять же делаю вывод - for(i=0;i<n;i++) { printf("\n%i ",a[i]); } - и ничего

Что я сделал не туда?

NiggasLife
() автор топика
Ответ на: комментарий от NiggasLife

Очевидно, что после sort твоя программа дальше не исполняется.

Hint: из функций надо возвращаться с помощью return, а не exit();

eXire ★★
()
Ответ на: комментарий от NiggasLife

Взял другой исходник, подшаманил, теперь все как надо. Может, кому пригодится:

#include<stdio.h>
#include<stdlib.h>

#define n 20

int merge(int *, int , int , int);
int mergeSort (int *, int , int);

int main() {
	int *a;
	int i;

	a = ( int* ) malloc ( n*sizeof(int) );

	for ( i = 0; i < n; i++ )
	{
		*(a+i)=rand()%100;
			printf( "%i ", *(a+i) );
	}

	printf("\n");
	printf( "\nAfter sorting\n" );

	printf("\n");

	*a=mergeSort(a, 0, n-1);

	for ( i = 0; i < n; i++ )
	{
		printf( "%i ", *(a+i) );
	}

	free(a);

	return 0;
}


int merge (int *arr, int a, int split, int b)
{


  int pos1 = a;
  int pos2 = split + 1;
  int pos3 = 0;

  int *temp;
  temp = (int*) malloc ( ( b-a+1 ) *sizeof(int) );

  while (pos1 <= split && pos2 <= b)
 {
	 if ( *(arr + pos1) < *(arr + pos2) )
	 {
		  *( temp+pos3 ) = *( arr+pos1 );
		  pos3++;
		  pos1++;
	 }

	 else
	 {
		*( temp+pos3 ) = *( arr+pos2 );
		pos3++;
		pos2++;
	 }
 }

  while ( pos2 <= b )
  {
		*( temp+pos3 ) = *( arr+pos2 );
		pos3++;
		pos2++;

  }

  while ( pos1 <= split )
  {
		*( temp+pos3 ) = *( arr+pos1 );
		pos3++;
		pos1++;
  }

  for ( pos3 = 0; pos3 < b-a+1; pos3++ ) *( arr + a + pos3) = *( temp + pos3 );

free(temp);

return *arr;

}//////////////////////////////////////////// merge

int mergeSort(int *arr, int a, int b)
{
  int split;

  if (a < b)
  {

	 split = (a + b)/2;

	mergeSort (arr, a, split);
	mergeSort (arr, split+1, b);
	merge (arr, a, split, b);

  }

return *arr;

}

PS> for searchbots: сортировка слиянием в `Linux C`

NiggasLife
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.