Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9

Ошибка в строке: mergeSort(p,q);

22.06.2009, 15:45. Показов 1298. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка в программе сортировки слиянием.
При запуске появляется очень много строчек с сообщением at Gr.mergeSort(Gr.java:38).
Я приведу часть кода (38 строчку я отметила)
public static int q;
public static void mergeSort(int p,int r){
if(p<r) {
q=(q+r)/2;
38: mergeSort(p,q);
mergeSort(q+1,r);
merge(p,q,r);
}
}
Дальше метод merge описан.
Вообще саму программу я переделывала из C-шной, которая работала. Наверное, я как всегда торможу, но программу мне надо доделать срочно, а ошибку не найти
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2009, 15:45
Ответы с готовыми решениями:

проверте где ошибка в mergeSort
main.cpp #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;iomanip&gt; #include &quot;merge_sort.h&quot; #include...

MergeSort
Используя алгоритм MergeSort, напишите программу для сортировки массива, состоящего из N целых чисел. Внимание! Не используйте...

MergeSort
Уважаемые форумчане - прошу простить за надоевшую тему, однако не откажите в помощи помогите найте ошибку в алгоритме - который я пытаюсь...

8
0 / 0 / 0
Регистрация: 05.04.2009
Сообщений: 78
22.06.2009, 16:15
мне кажется что проблема возникает при обратном ходе рекурсии из за того что ты объявила q как static, не надо его статичной делать, сделай нормальный объект своего класса и вызови метод сортировки.
0
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
22.06.2009, 16:21  [ТС]
Если q делать не staticом то при компиляции выдается ошибка:
E:JavaGr.java:37: non-static variable q cannot be referenced from a static context
q=(q+r)/2;
^
0
noir
22.06.2009, 17:06
Так надо и метод тогда не статическим делать, только дело имхо, не в этом...

А какая именно ошибка выдается?
0 / 0 / 0
Регистрация: 05.04.2009
Сообщений: 78
22.06.2009, 17:07
у mergeSort тоже статик убрала?
кинь полный текст проги
0
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
22.06.2009, 17:14  [ТС]
Текст проги:
import java.util.*;

class St {
public static int top;
public static int as[] = new int[100];
public int x;
void St(int ax){
x=ax;

}
void push(int x){
top++;
as[top]=x;
}
int pop(){
top--;
return as[top+1];
}
int next_to_top(){
return as[top-1];
}
}

class Gr {
public static int i,j,k;
public static int n;
public static int x[] = new int[200];
public static int y[] = new int[200];
public static int ind;
public static int miny;
public static int A[] = new int[200];//вспомогательный массив
public static int B[] = new int[200];//здесь будут лежать номера точек, упорядоченные по полярному углу относительно точки ind
public static St s = new St();
public static int q;
public static void mergeSort(int p,int r){
if(p<r) {
q=(q+r)/2;
mergeSort(p,q);
mergeSort(q+1,r);
merge(p,q,r);
}
}
public static void merge(int p, int q, int r) {
i=p;
j=q+1;
k=p;
do {
int G=((x[A[i]]-x[ind]+1)*(y[A[j]]-y[ind]) - (y[A[i]]-y[ind])*(x[A[j]]-x[ind]+1)) *(- y[A[i]]+y[ind]);
if (G<0){
B[k]=A[i];
k++;
i++;
}
if(G==0) {
if(((x[A[i]]-x[ind]+1)*(y[A[j]]-y[ind]) - (y[A[i]]-y[ind])*(x[A[j]]-x[ind]+1))==0) {
if(y[A[i]]>y[A[j]]) {
B[k]=A[i];
k++;
i++;
}
else {
B[k]=A[j];
k++;
j++;
}
}
else {
if(( - y[A[i]]+y[ind])==0){
B[k]=A[i];
k++;
i++;
}
}
}
if(G>0){
B[k]=A[j];
k++;
j++;
}
}
while((i<=q)&&(j<=r));
int temp=j;
if(i>q){
for(int t=k; t<=r;t++){
B[t]=A[temp];
temp++;
}
}
temp=i;
if(j>r){
for(int t=k; t<=r;t++){
B[t]=A[temp];
temp++;
}
}
for(int h=p;h<=r;h++){
A[h]=B[h];
}
}
public static void main(String[] args){
int i,j;
n = Integer.parseInt(args[0]);
for(i=0;i<n;i++){
x[i] = Integer.parseInt(args[2*i+1]);
y[i] = Integer.parseInt(args[2*i+2]);
}
s.top=-1;
ind=0; // индекс точки с наименьшей ординатой
miny=y[0]; // значение у-ковой координаты этой точки
for(i=1;i<n;i++){ // в этом цикле находим точку с наименьшей ординатой
// (если таких несколько - выбираем самую левую)
if(y[i]==miny){
if(x[i]<x[ind]){
miny=y[i];
ind=i;
}
}
else {
if(y[i]<miny){
miny=y[i];
ind=i;
}
}
}
for(i=0;i<n;i++) {
A[i]=i;
}
mergeSort(0,n-1);
// Gr a = new Gr();
// a.mergeSort(0,n-1);
for(i=0;i<n;i++) {
System.out.println(B[i]);
}

}
}
Сорри, там слегка лишнее есть, наверное - мне сортировка для выпуклой оболочки нужна. ВообщемЮ если скажете, что исправить, буду очень благодарна
0
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
22.06.2009, 17:19  [ТС]
По-поводу static-а.
Наверное, я как всегда чего-то не понимаю. Если убрать его у q, то надо и у MergeSortа. Тогда приходится убирать его у n (количество чисел для сортировки), а у n он не убирается (как я понимаю из-за того, что n вводиться с клавиатуры). Вот.
0
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
22.06.2009, 18:11  [ТС]
Хм, одну ошибку я нашла: в mergeSort-е
q=(p+r)/2;
Только все равно прога неправильно работает. Например при вводе 3 3 3 3 1 1 1 выдает 1 2 0. А должна бы 2 1 0.
0
0 / 0 / 0
Регистрация: 21.06.2009
Сообщений: 9
22.06.2009, 18:18  [ТС]
Все, ребята, все ошибки найдены, все заработало. Спасибо большое всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2009, 18:18
Помогаю со студенческими работами здесь

Сортировка MergeSort
База Должна отсортироваться по дате вклада но она не сортируется а выводит просто базу. Подскажите пожалуйста в чем ошибся. #include...

Рекурсия в mergeSort
Написал сортировку слиянием: splitList divSize lst = splitAcc divSize (\x -&gt; x) lst where splitAcc divSize cont = cont(,) ...

MergeSort - исправить код
Доброго времени суток! Коротко о проблеме. После ознакомления с кодом в Вики и на различных форумах я склепал свой. Но ошыбки мне...

Не работает сортировка (MergeSort)
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; const int N = 4000; int L,R; char...

Mergesort, значение -842150451
проблема заключается в том, что при соединении *m1 и *m2 в *r, если *m1 длины 1, а *m2 длины 2, и m1&lt;m2&lt;m2, то значение m2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru