Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Segmentation fault в Сортировке слиянием, Попробовал написать сорт. рекурсивно. 
:(
    Опции темы
ozeron
Дата 21.3.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.9.2011

Репутация: нет
Всего: нет



Всем доброго времени суток,
   Сейчас прохожу курс по алгоритмам. Собственно в первом разделе рассматривается сортировка слиянием, вот я и решил ее написать. Заранее извиняюсь, если у меня получился уж очень кривой велосипед)) Но при компиляции мне пишет в одном компиляторе: 
Скрытый текст
 Applications/Developer/TextMate.app/Contents/SharedSupport/Bundles/C.tmbundle/Support/bin/bootstrap.sh: line 7:  1721 Segmentation fault: 11  "$3".out

А в другом:
Скрытый текст
 warning: Unable to restore previously selected frame.
No memory available to program now: unsafe to call malloc
warning: Unable to restore previously selected frame. 


Вот собственно код программы:
Скрытый текст

Код

#include <fstream>
using namespace std;

void mergeSort(int arr[], int length);
void merge(int leftArr[], int rightArr[], int Arr[], int length);

int main()
{
    ifstream  in(" input.txt");
    ofstream out("output.txt");
    int length = 0;
    in>>length;
    int *arr = new int [length];
    for(int i=0; i<length; i++) in>>arr[i];
    mergeSort(arr, length);
    for (int i=0; i<length; i++) out<<arr[i];
    delete [] arr;
    return 0;    
}

void merge(int leftArr[], int rightArr[], int Arr[], int length)
{
    int lLength=length/2; int i = 0;
    int rLength=length-lLength; int j=0;
    for (int k=0; k<length; k++) {
        if((i<lLength) && (leftArr[i] < rightArr[j])) {Arr[k]=leftArr[i]; i++;} else
        if((j<rLength) && (leftArr[i] > rightArr[j])) {Arr[k]=rightArr[j]; j++;}
    }
}


void mergeSort(int arr[], int length)
{
    if (length != 1) {
    int lLength = length/2;
    int rLength = length - length/2;
    int *lArr = new int [lLength];
    int *rArr = new int [rLength];
    for (int i=0; i<lLength ; i++) lArr[i]=arr[i];
    for (int j=0; j<rLength; j++) rArr[j]=arr[lLength+j];
    
    mergeSort(lArr, lLength);
    mergeSort(rArr, rLength);
    merge(lArr,rArr,arr,length);
    
    delete [] lArr;
    delete [] rArr;
    } else ;
}




Походу где-то неакуратно у меня с дин. массивами, но не могу найти где( 
Помогите кто-нибудь пожалуйста!

Это сообщение отредактировал(а) ozeron - 21.3.2012, 20:24
PM MAIL   Вверх
ozeron
Дата 21.3.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.9.2011

Репутация: нет
Всего: нет



Нашел ошибку, осталось только алгоритм исправить:

 length != 1 >> length > 1 

Там даже ошибка была в том, что файл не находило и инициализоровали массивы.

Код

#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;

void mergeSort(int arr[], int length);
void merge(int leftArr[], int rightArr[], int Arr[], int length);

int main()
{
    ifstream  in(" input.txt");
    ofstream out("output.txt");
    int length = 0;
    cin>>length;
    int *arr = new int [length];
    for(int i=0; i<length; i++) cin>>arr[i];
    mergeSort(arr, length);
    for (int i=0; i<length; i++) cout<<arr[i];
    delete [] arr;
    cin.get();
    return 0;    
}

void merge(int leftArr[], int rightArr[], int Arr[], int length)
{
    int lLength=length/2; int i = 0;
    int rLength=length-lLength; int j=0;
    for (int k=0; k<length; k++) {
        if((i<lLength) && (leftArr[i] < rightArr[j])) {Arr[k]=leftArr[i]; i++;} else
        if((j<rLength) && (leftArr[i] > rightArr[j])) {Arr[k]=rightArr[j]; j++;}
    }
}


void mergeSort(int arr[], int length)
{
    if (length > 1) {
    int lLength = length/2;
    int rLength = length - length/2;
    int *lArr = new int [lLength];
    int *rArr = new int [rLength];
    for (int i=0; i<lLength ; i++) lArr[i]=arr[i];
    for (int j=0; j<rLength; j++) rArr[j]=arr[lLength+j];
    
    mergeSort(lArr, lLength);
    mergeSort(rArr, rLength);
    merge(lArr,rArr,arr,length);
    
    delete [] lArr;
    delete [] rArr;
    } else ;
}


Это сообщение отредактировал(а) ozeron - 21.3.2012, 20:47
PM MAIL   Вверх
borisbn
Дата 21.3.2012, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Честно говоря, неохота разбираться, но алгоритм, судя по всему, нерабочий (вернее реализация)
http://liveworkspace.org/code/737ce4999750...951340ad16def20

Добавлено через 2 минуты и 49 секунд
а в эту строчку
Цитата(ozeron @  21.3.2012,  20:44 Найти цитируемый пост)
length != 1 >> length > 1 

я дооооолго втыкал, пока не понял, что << это не оператор сдвига, а "нужно было заменить на"


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ozeron
Дата 21.3.2012, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.9.2011

Репутация: нет
Всего: нет




 Да алгоритм не работает %), буду думать.

Это сообщение отредактировал(а) ozeron - 21.3.2012, 23:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.