Форум программистов, компьютерный форум CyberForum.ru

Свой квиксорт с домино и буфетчицами! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при завершении программа. http://www.cyberforum.ru/cpp-beginners/thread322257.html
Проблема в следующим когда я создаю динамический массив объект при завершении программы вылетает ошибка не пойму в чем проблема ??? #include <iostream> #include <Windows.h> using namespace std; class CBook { public: CBook(void); void Input(char *author1,char *title1); void Show ();
C++ целое число К Дано целое число К. Вывести строку описания оценки, соответсвующей числу К(1-плохо, 2-неудовлетворительно, 3-удовлетворительно, 4-хорошо, 5-отлично). Если К не лежит в диапозоне от 1 до 5 то вывести строчку -ошибка. Решить только через Switch и case. http://www.cyberforum.ru/cpp-beginners/thread322256.html
C++ Создание двоичного файла
Такая заморочка,нужно создать двоичный файл,вроде сделал все по правилам,но преподу не нравится,то что последовательность цифр в двоичном файле не должна отображаться в виде цифр,а должна отображаться в виде символов(что-то вроде когда не подходят кодировки) вот условие задачи : Дан двоичный файл, содержащий расположенные по строкам M двумерных вещественных массивов, каждый размером L X K ( L...
C++ считать с файла через ентер
Здравствуйте! Если считывать с файла вот так: freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); cin>>a>>b; то считается вот так, если число-пробел-число а если число-ентер-число то не считается как считать два числа введенные через ентер
C++ подскажите как вывести позицию элемента http://www.cyberforum.ru/cpp-beginners/thread322196.html
#include "stdafx.h" # include <iostream> # include <conio.h> # include <Windows.h> using namespace std; int main () { setlocale (LC_CTYPE, "Russian"); int n,k,v,m;
C++ как откинуть последнюю цифру от фисла? здравствуйте есть число: 399 995 надо получить 39 999 надо откинуть последнюю цифру... подробнее

Показать сообщение отдельно
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
18.06.2011, 21:03     Свой квиксорт с домино и буфетчицами!
Доброго времени суток!
В общем идея проста: сделать псевдо рекурсивную сортировку разделением, т.е. она будет работать на собственноручно созданом стеке.
Делается это потому что системный вылетает при большом количестве элементов.
Так вот проблема в том, что для 10 элемнов массива(так же для 30) она работает змечательно а вот уже для 40 работает аномально(не вылетает, но и не до конца сортирует), для 60 и дальше соответственно runtime улетает в поднебесье...
В чем косяк, вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include<iostream>
#include<stdio.h> 
#include<stdlib.h> 
#include<time.h>
#include<windows.h>
struct cover{
    int offsetl;
    int offsetr;
    int mid;
    void operator =(cover& param){
        offsetl=param.offsetl;
        offsetr=param.offsetr;
        mid=param.mid;
    }
    cover(){
        offsetl=0;
        offsetr=0;
        mid=0;
    }
    cover(int i1,int i2,int i3){
        offsetl=i1;
        offsetr=i2;
        mid=i3;
    }
    friend std::ostream& operator <<(std::ostream& S,cover& param){
        S<<param.offsetl<<" "<<
            param.mid<<" "<<
            param.offsetr<<std::endl;
        return S;
    }
};
struct estak{
    cover dat;
    estak* next;
    estak(cover& val){
        dat.mid=val.mid;
        dat.offsetl=val.offsetl;
        dat.offsetr=val.offsetr;
        next=NULL;
    }
    ~estak(){;}
};
class stak{
    estak* head;
    int count;
public: 
    stak(){
        head=NULL;count=0;
    }
    void push(cover val){
        estak* tmp=new estak(val);
        tmp->next=head;
        head=tmp;
        count++;
    }
    cover pop(){
        cover tmp=head->dat;
        estak* tmp_p=head;
        head=head->next;
        tmp_p->next=NULL;
        delete tmp_p;
        count--;
        return tmp;
    }
    int good(){return count;}
    ~stak(){;}
};
void sort(char piece[],cover date){
    for(int i=date.offsetl,  j=date.offsetr;i <= j;){
        if (piece[i] < piece[date.mid]) {i++; continue;}
        if (piece[j] >= piece[date.mid]){j--; continue;}
        int c = piece[i];piece[i] = piece[j]; piece[j]=c;
        i++,j--;            
    }
}
int main(){
    long T0=clock();
    stak buf;
    char m_str[]="948372615094837261509483726150948372615094837261509483726150";
    std::cout<<m_str<<std::endl<<strlen(m_str)<<" -len"<<std::endl;
    buf.push(cover(0,strlen(m_str)-1,(strlen(m_str)-1)/2));
    while(buf.good()){
        cover tmp=buf.pop();
        sort(m_str,tmp);
        if(tmp.offsetr-tmp.mid>=2){
            buf.push(cover(tmp.mid,tmp.offsetr,tmp.mid+(tmp.offsetr-tmp.mid)/2));
            buf.push(cover(tmp.offsetl,tmp.mid,tmp.mid/2));
        }
    }
    std::cout<<m_str<<std::endl;
    std::cout<<clock()-T0<<" run_time"<<std::endl;
    return 0;
}
Если кто подскажет буду очень благодарен)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru