Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2014, 04:22   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию не пойму что делает отладчик

Код быстрой сортировки

Когда в функции QSort k==4, программа скачет между закрывающей фигурной скобкой } и if(j<r) QSort(p,i,r);(в коде, где комментарий)
Что происходит??

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE	4


void Init(int* p, int n, int number){
	int i;
	for(i=0;i<n;i++)	p[i]=number++;
}



void InitR(int* p, int n, int number){
	int i;
	for(i=0;i<n;i++)	p[i]=(rand()%number)+1;
}	

void QSort(int* p,int l, int r){
	int i=l,j=r;
	int buf,m=(int)p[(l+r)/2];
	static	int k;


	do{
		while(p[i]>m && i<r)	i++;	
		while(p[j]<m && j>l)	j--;	

		if(i<=j){
			buf=p[i];p[i]=p[j];p[j]=buf;i++;j--;
		};
	}while(i<j);


	if(r<l)	printf("\nk = %d	\n",k);
	k++;

	if(j>l)	QSort(p,l,j);
	if(j<r)	QSort(p,i,r);//тут скачет
}                                //и тут




void Show(int* p, int n){
	int i;
	for(i=0;i<n;i++)	printf("p[%d] = %d	\n",i,p[i]);
	printf("\n\n\n");
}


void main(void){
	int* p;
	p=(int*)malloc(SIZE*sizeof(int));
	if(p==NULL){
		printf("Mo memory!");
		exit(0);
	}
		
//	Init(p,SIZE,5);	
	InitR(p,SIZE,SIZE);	

	Show(p,SIZE);
	QSort(p,0,SIZE-1);


			
	Show(p,SIZE);


	free(p);	p=NULL;
	system("pause");
}

Последний раз редактировалось zla9_kolu4ka; 16.07.2014 в 04:26.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 16.07.2014, 08:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

И что же у тебя за отладчик? Компиль?
Напиши так:
Код:
	if(j>l)	
QSort(p,l,j);
	if(j<r)	
QSort(p,i,r);//тут скачет
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2014, 08:32   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

zla9_kolu4ka, а Вы понимаете, что процедура QSort рекурсивная (т.е. она вызывает сама себя)?

эти "скакания" - это вызов процедуры из самой себя.
В отладчике есть "Step into" == "шаг с заходом внутрь". Попробуйте пройтись через него и контролируйте при этом параметры процедуры и стек вызовов...


в качестве хумора.
чтобы понять рекурсию надо сначала понять рекурсию....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните пожалуста как и что делает эта программа и почему она это делает. Dimka-novitsek Общие вопросы C/C++ 7 16.10.2013 12:02
Что-то не так в программе...не пойму что Karina_Vamp Помощь студентам 5 24.12.2010 21:06
Печать. Что делает MS и не делает Delphi Влад12 Общие вопросы Delphi 8 05.05.2010 20:04
Что делает код AllForCS PHP 1 24.02.2010 00:50
что такое компилятор, компановщик, отладчик +Hitman+ Помощь студентам 4 03.03.2008 16:42