Ниже приведен код, который я мог бы придумать для техники быстрой сортировки. Я не уверен, правильно ли это, но согласно моей логике, я думаю, это должно работать нормально. Тем не менее, я думаю, что слишком переусердствовал, потому что, когда я пытаюсь запустить этот код на 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;
}
Скомпилируйте программу с флагами отладки и запустите ее в отладчике. Большинство IDE предлагают кнопку «Отладка». GCC позволит вам скомпилировать флаги отладки с опцией -g, и вы можете использовать gdb.
В этом случае я сделал последний с g++ -g quicksort.cpp && gdb a.out
, Однажды я использовал run
, Это сразу дало мне «Не удалось получить доступ к памяти». ошибка завершена с номером строки. print <variable>
будет печатать переменные и quit
выйдет.
Я специально не даю фактическую информацию о местонахождении ошибки в образовательных целях.
Я положил это в файл и скомпилировал с:
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, вы сможете просто нажать кнопку «отладка» (обычно зеленая ошибка), и она сообщит вам эту точную информацию.