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

Не работает сортировка С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ двухмерный массив http://www.cyberforum.ru/cpp-beginners/thread215407.html
дан двухмерный массив n=m найти количество нулевых елементов которые находятся под побочной диагональю
C++ задание написать программу со структурими добавления поиска вывода на экран данных функция обработки обязательна определить список автомобилей каторые были зарегестрированы в указанные сроки:код автомобилиста номер автомобиля марка авто дата регестрации цена за услуги помогите контр роб http://www.cyberforum.ru/cpp-beginners/thread215405.html
C++ Двухмерный массив. Найти нулевые эл-ты
Ребята помогите пожалуйста! на контрольной сижу... =( Дан двухмерный массив (n=m). Найти кол-во нулевых элементов,находящихся под побочной диагональю (i+j=n+1). Решить нужно через функции... Заранее спасибо!!!
программа на if C++
пишу на Borland C. дано число x. напечатать в порядке возрастания числа: sinx, cosx, lnx. Если при каком-либо x некоторые из выражений не имеют смысла, вывести сообщение об этом и сравнить значения только тех, которые имеют смысл.
C++ Для каждого числа последовательности проверить, представляют ли его цифры строго убывающую последовательность http://www.cyberforum.ru/cpp-beginners/thread215397.html
Добрый день!Очередная задачка: Вводится последовательность целых чисел, 0 – конец последовательности. Для каждого числа последовательности проверить, представляют ли его цифры строго убывающую последовательность, например, 1234 (результатом функции будет 1 – Да, 0 - НЕТ).
C++ Небольшая проблемка) Всем доброго времени суток, у меня возникла проблема с напиванием одной программы задание следующее :"Написать функцию нахождения MAX среди массива целых чисел. Найти MAX в двух массивах этой длины", два двумерных массива создать не проблема, но вот как найти среди них наибольший элемент для меня проблема.... Помогите кто может очень нужно сдать. подробнее

Показать сообщение отдельно
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19

Не работает сортировка С++ - C++

20.12.2010, 13:37. Просмотров 234. Ответов 0
Метки (Все метки)

Добрый день! Требуется отсортировать структуру по возрастанию по полю name. Решил использовать быструю сортировку, но она не работает, а ошибку я никак не найду(
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
#include <assert.h>
 
using namespace std;
 
class PhoneBookTable
{
public:
    PhoneBookTable();
    ~PhoneBookTable();
    void DisplayTableElements(int RecordsCount);
    void setTableElements(char *name, int number, int RecordsCount);
    void setTableSize(int RecordsCount);
    void getTableSize(int &RecordsCount);
    void sortTableElements(int RecordsCount);
private:
    struct PhoneBookRecord {
        char *name;
        int number;
    } *PhoneBookRecords;
    int RecordsCount;
};
 
PhoneBookTable::PhoneBookTable()
{
    RecordsCount=0;
    PhoneBookRecords=NULL;
}
 
PhoneBookTable::~PhoneBookTable()
{
    delete []PhoneBookRecords;
}
 
void PhoneBookTable::DisplayTableElements(int n)
{
    assert(n>=0 && n<=RecordsCount);
    cout
            << PhoneBookRecords[n].name << " ";/* << "\n"
            << PhoneBookRecords[n].number << endl << "\n";*/
}
 
void PhoneBookTable::setTableElements(char *name, int number, int n)
{
    assert(n>=0 && n<=RecordsCount);
    PhoneBookRecords[n].name=name;
   // PhoneBookRecords[n].number=number;
}
 
void PhoneBookTable::setTableSize(int lenght)
{
    assert(lenght>=0);
    delete[] PhoneBookRecords;
    PhoneBookRecords = new PhoneBookRecord[lenght];
 
    RecordsCount=lenght;
}
 
void PhoneBookTable::getTableSize(int &lenght)
{
    lenght=RecordsCount;
}
 
void PhoneBookTable::sortTableElements(int RecordsCount)
{
    int i = 0, j = RecordsCount;            
    char *temp, *p;
 
    p = PhoneBookRecords[RecordsCount>>1].name;              
 
    // процедура разделения
    while ( i<=j )
    {
      while ( PhoneBookRecords[i].name < p ) i++;
      while ( PhoneBookRecords[j].name > p ) j--;
 
      if (i <= j)
      {
        temp = PhoneBookRecords[i].name;
        PhoneBookRecords[i].name = PhoneBookRecords[j].name;
        PhoneBookRecords[j].name = temp;
        i++;
        j--;
      }
    }
 
    // рекурсивные вызовы, если есть, что сортировать
    if ( j > 0 )
        sortTableElements(j);
    if ( RecordsCount > i )
        sortTableElements(RecordsCount-i);
}
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    PhoneBookTable tab;
    int n, number=0; // n - число записей
    char *name;
 
    cout<<"Input number: ";
    cin>>n;
 
    tab.setTableSize(n);
 
    for(int i=0; i<n; i++)
    {
        name = new char[10];
        cout << "Input name of abonent: ";
        cin >> name;
//        cout << "Input telephone number: ";
//        cin >> number;
        tab.setTableElements(name, number, i);
    }
 
    for(int i=0; i<n; i++)
        tab.DisplayTableElements(i);
 
    tab.sortTableElements(n);
    cout << "\n";
    for(int i=0; i<n; i++)
        tab.DisplayTableElements(i);
 
    return a.exec();
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru