Почему происходит сбой моей программы быстрой сортировки?

Ниже приведен код, который я мог бы придумать для техники быстрой сортировки. Я не уверен, правильно ли это, но согласно моей логике, я думаю, это должно работать нормально. Тем не менее, я думаю, что слишком переусердствовал, потому что, когда я пытаюсь запустить этот код на DevC ++, происходит сбой и закрытие программы. Это не происходит с каждой программой, поэтому, очевидно, есть проблемы только с этим кодом.

#include<iostream.h>
#include<conio.h>

int quick(int, int);

int split(int beg, int end);

int a[7] = { 43, 6, 235, 76, 23, 65, 29 };

int main() {
quick(0, 6);
getch();
return 1;
}

int quick(int beg, int end) {
//trial for self coding

int loc = split(beg, end);
quick(beg, loc - 1);//first half
quick(loc + 1, end);//second half

//end of coding

cout << "\nThe sorted array is :\t";
for (int i = 0; i < 7; i++)
cout << a[i] << "\t";
return 0;
}

//SPLIT FUNC STARTS
int split(int beg, int end) {
int temp, loc, left, right, count = 1;
left = beg;
right = end;
loc = beg;
while (left != right) {
if ((count % 2) != 0) {
while (a[loc] <= a[right]) {
right--;
}
if (loc == right)
return loc;
if (a[loc] > a[right]) {
temp = a[loc];
a[loc] = a[right];
a[right] = temp;
loc = right;
left++;
count++;
continue;
}
}// end of count%2 if
else {
while (a[left] <= a[loc])
left++;
if (loc == left)
return loc;
if (a[loc] < a[left]) {
temp = a[loc];
a[loc] = a[right];
a[right] = temp;
loc = left;
right--;
count++;
continue;
}
}//end of else
}// end of while
return loc;
}

-2

Решение

Скомпилируйте программу с флагами отладки и запустите ее в отладчике. Большинство IDE предлагают кнопку «Отладка». GCC позволит вам скомпилировать флаги отладки с опцией -g, и вы можете использовать gdb.

В этом случае я сделал последний с g++ -g quicksort.cpp && gdb a.out, Однажды я использовал run, Это сразу дало мне «Не удалось получить доступ к памяти». ошибка завершена с номером строки. print <variable> будет печатать переменные и quit выйдет.

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

3

Другие решения

Ошибки компиляции

Я положил это в файл и скомпилировал с:

g++ -g yourcode.cpp

Первая проблема:

yourcode.cpp:1:21: fatal error: iostream.h: No such file or directory
compilation terminated.

С последующим:

yourcode.cpp: In function ‘int quick(int, int)’:
yourcode.cpp:23:5: error: ‘cout’ was not declared in this scope
yourcode.cpp:23:5: note: suggested alternative:
/usr/include/c++/4.6/iostream:62:18: note:   ‘std::cout’

Вместо #include <iostream.h>, у тебя должно быть #include <iostream>, Вам также нужно using namespace std; Возможно, ваш компилятор невероятно устарел. Большинство компиляторов бесплатны, поэтому я настоятельно рекомендую приобрести такой, который не позволит вам совершать подобные ошибки во время обучения. Я давно не пользовался Windows, но предположительно Затмение работает примерно так же на нем, плюс Visual Studio Express тоже бесплатно. Я думаю Qt Creator также работает на Windows. Выберите любой из них, просто прекратите использовать тот, на котором вы сейчас находитесь.

Я также удалил вашу странную функцию ввода DOS, которую вы вызываете, чтобы приостановить программу. использование std::cin если вы хотите ввода.

Ошибка сегментации

Теперь, если я запускаю его, я получаю:

Segmentation fault (core dumped)

Так что это весело, что говорит GDB?

Starting program: /home/brendan/a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000004008b7 in split (beg=0, end=6) at yourcode.cpp:55
55              while (a[left] <= a[loc])

Что указывает на то, что в какой-то момент в строке 55 a[left] или же a[loc] не являются действительными местами в памяти. Вам, вероятно, нужно добавить какой-то код, чтобы убедиться, left а также loc оставаться в пределах массива.

если ты срочно нужно знать, что вызывает сбой вашей программы, запускать этот процесс самостоятельно будет гораздо быстрее, чем просить кого-то сделать это за вас. Этот процесс легко, и в результате очень немногие люди захотят запустить его для вас. Я сделал только в качестве примера, потому что я понимаю, что это не очевидно, когда вы впервые начинаете программировать.

Примечание: я использовал программы командной строки, чтобы проверить это, потому что это быстро, но вам может быть удобнее использовать отладчик в IDE. Если вы запустите Eclipse, вы сможете просто нажать кнопку «отладка» (обычно зеленая ошибка), и она сообщит вам эту точную информацию.

3

По вопросам рекламы [email protected]