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

Вывод массива после сортировки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 10:39     Вывод массива после сортировки #1
У меня не работает правельно вывод массива после сортировки, он такой же как и вводил, помогите.
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
#include <iostream.h>
#include  <conio.h>
#include  <stdlib.h>
class Mass
{
private:
float *PMass;
float Size;
public:
Mass();
~Mass();
void SetSize(float size){Size=size;};
float GetSize()const{return Size;};
void SetMassEL(float,float);
float GetMassEL(float)const;
};
Mass::Mass()
{ float i;
Size=100;
PMass=new float [Size];
}
Mass::~Mass()
{
float i;
for(i=0;i<Size;i++)
 delete[] PMass;
}
void Mass::SetMassEL(float x,float el){PMass[x]=el;}
float Mass::GetMassEL(float x1)const{return PMass[x1];}
void main()
{
Mass*PObject=new Mass;
float i=0,n;
float imin,el,ek,q,w,z,t;
char ch;
clrscr();
//vvod size;
cout<<"SIZE->";
cin>>n;
PObject->SetSize(n);
//vvod masuvy
for(i=0;i<PObject->GetSize();i++)
{cout<<"\n Enter element MASUVy-> ["<<i<<"]=";
cin>>el;
PObject->SetMassEL(i,el);}
cout<<endl<<"Masuv do sort"<<endl;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
for(i=0;i<PObject->GetSize()-1;i++)
{
for (float j=i+1;j<n;j++)
{
if (PObject->GetMassEL(i)<PObject->GetMassEL(j)) {i=j;}
}
   q=PObject->GetMassEL(i);
q =i ;
i =q;
}
//Vuvod
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
18.04.2010, 14:24     Вывод массива после сортировки #2
На сколько я понял, то это сортировка?
C++
1
2
3
4
5
6
7
8
9
10
for(i=0;i<PObject->GetSize()-1;i++)
{
for (float j=i+1;j<n;j++)
{
if (PObject->GetMassEL(i)<PObject->GetMassEL(j)) {i=j;}
}
   q=PObject->GetMassEL(i);
q =i ;
i =q;
}
Я так и не понял как вы собирались его отсортировать таким образом, по этому переписал.
Также я не понял, почему индексы в массиве у вас float, вы можете обратится к элементу массива с индексом 2.75?
C++
1
2
3
4
5
6
7
8
9
10
float tmp;
int j;
for(i = 0; i < PObject->GetSize() - 1; ++i)
    for (j = i + 1; j < PObject->GetSize(); ++j) 
        if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
        {
            tmp = PObject->GetMassEL(i);
            PObject->SetMassEL(i, PObject->GetMassEL(j));
            PObject->SetMassEL(j, tmp);
        }
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 15:09  [ТС]     Вывод массива после сортировки #3
Заполнять массив мне нада будет целыми, дробовыми цифрами, а дальше еще и символьно. Спасибо что помогли!!
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
18.04.2010, 15:11     Вывод массива после сортировки #4
MAQSA, так у вас же не ассоциативный массив и вы обращаетесь по номеру элемента в массиве, т.е. 0, 1, ... , n;, т.е. целое число, а вы почему-то сделали индекс вещественным
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 16:13  [ТС]     Вывод массива после сортировки #5
Скажите еще пожалуста, я правельно сделал сортировку методом пузырька
C++
1
2
3
4
5
6
7
8
9
10
for( i = 0; i < PObject->GetSize() - 1;i++)
{
      for( j=PObject->GetSize()-1; j>i; j--)
     if(PObject->GetMassEL(j-1) > PObject->GetMassEL(j))
     {
    tmp = PObject->GetMassEL(j-1);
    PObject->SetMassEL(PObject->GetMassEL(j-1), PObject->GetMassEL(j));
    PObject->SetMassEL(PObject->GetMassEL(j),tmp);
}   
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
18.04.2010, 17:18     Вывод массива после сортировки #6
MAQSA, похоже на правду
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 23:12  [ТС]     Вывод массива после сортировки #7
Но оно не работает так как нужно, вот: 107 строчка.
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
127
128
129
#include <iostream.h>
#include  <conio.h>
#include  <stdlib.h>
class Mass
{
private:
float *PMass;
float Size;
public:
Mass();
~Mass();
void SetSize(float size){Size=size;};
float GetSize()const{return Size;};
void SetMassEL(float,float);
float GetMassEL(float)const;
void SetSort(float q,float i){ q=GetMassEL(i);
q =i ;
i =q;};
};
Mass::Mass()
{ float i;
Size=100;
PMass=new float [Size];
}
Mass::~Mass()
{
float i;
for(i=0;i<Size;i++)
 delete[] PMass;
}
void Mass::SetMassEL(float x,float el){
 
PMass[x]=el;
 
}
float Mass::GetMassEL(float x1)const{return PMass[x1];}
 
void main()
{
Mass*PObject=new Mass;
float i=0,n;
float tmp;
int j;
float r,min,el,ek,q,w,z,t;
char ch,ch1;
clrscr();
//vvod size;
cout<<"SIZE->";
cin>>n;
PObject->SetSize(n);
metka1:clrscr();
cout<<endl<<"1-Randomize";
cout<<endl<<"2-User";
cout<<endl<<"Pliz enter 1 or 2"<<endl<<"==>";
cin.get(ch);
switch(ch)
{
case'1':{
randomize();
for(i=0;i<PObject->GetSize();i++)
{
el=random(10);
PObject->SetMassEL(i,el);
}
break;
}
case'2':
{//vvod masuvy
for(i=0;i<PObject->GetSize();i++)
{cout<<"\n Enter element MASUVy-> ["<<i<<"]=";
cin>>el; PObject->SetMassEL(i,el);
}
break;
}
default:{
cout<<endl<<"ENTER 1 or 2"<<endl;
goto metka1;
}
}
metka2:clrscr();
cout<<"1-Sort Vubor";
cout<<endl<<"2-Sort Bulb"<<endl;
cout<<"==>";
cin.get(ch1);
switch(ch1)
{
case'1':{
cout<<"Sort Vubir"<<endl;
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
    }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
 
break;
}
case'2':
{
//======================Пузырька================
cout<<"Sort Bulb"<<endl;
for( i = 0; i < PObject->GetSize() - 1;i++)
{
      for( j=PObject->GetSize()-1; j>i; j--)
     if(PObject->GetMassEL(j-1) > PObject->GetMassEL(j))
     {
    tmp = PObject->GetMassEL(j-1);
    PObject->SetMassEL(PObject->GetMassEL(j-1), PObject->GetMassEL(j));
    PObject->SetMassEL(PObject->GetMassEL(j),tmp);
}   
}
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
 
break;
}
default:{
cout<<endl<<"ENTER 1 or 2"<<endl;
goto metka2;
}
}
}
Добавлено через 4 часа 29 минут
Найдите ошибку пожалоста, в сортировке Бульбашки.
Тиша
 Аватар для Тиша
1 / 1 / 0
Регистрация: 02.11.2009
Сообщений: 75
25.04.2010, 22:38     Вывод массива после сортировки #8
а для буковок похожей штучки, чтоб разобраться, случаем ни у кого не завалялось, нэ?))
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
26.04.2010, 19:40  [ТС]     Вывод массива после сортировки #9
Аналогично цифрам оно будет.

Добавлено через 2 часа 31 минуту
M128K145, подскажи пожалуйста, как сделать вывод каждого шага сортировки массива, т.е. когда меняются цифры местами

Оригинал
Подскажи пожалоста, как сделать вывод кожного кроку сортировки массива, тобто когда меняються цифри местами.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
26.04.2010, 20:01     Вывод массива после сортировки #10
Вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j, k, tmp;
for(i = 0; i < n - 1; ++i)
    for(j = 0; j < i; ++j)
    {
        if(mas[j] > mas[j + 1])
        {
            tmp = mas[i];
            mas[i] = mas[i + 1];
            mas[i + 1] = tmp;
        }
        for(k = 0; k < n; ++k)
            std::cout<<mas[k]<<' ';
        std::cout<<std::endl;
    }
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
27.04.2010, 00:35  [ТС]     Вывод массива после сортировки #11
M128K145, Что-то не выходит, я вот как сделал:
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
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
        }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";//Вывод уже отсортированного массиву
 
 cout<<endl<<"Kpok Za Kpokom";
 for(i=0;i<PObject->GetSize()-1;i++)
 for(j=0;j<i;j++)
 {
 if(PObject->GetMassEL(j) > PObject->GetMassEL(j+1))
 {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(i+1));
        PObject->SetMassEL(i+1, tmp);
        }
 cout<<endl;
 for(k=0;k<PObject->GetSize();k++)
   cout<<PObject->GetMassEL(k)<<" ";//вывод покрово
 }
Оно показывает по крокову сортировку, но не правельно. Может быть не тут вставил цикл с умовой? хотя по разному пробувал.
Тиша
 Аватар для Тиша
1 / 1 / 0
Регистрация: 02.11.2009
Сообщений: 75
27.04.2010, 09:02     Вывод массива после сортировки #12
О, спасибо)))
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
28.04.2010, 10:09  [ТС]     Вывод массива после сортировки #13
Так как сделать?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.04.2010, 10:12     Вывод массива после сортировки #14
MAQSA, а можете скриншот приложить?
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
28.04.2010, 17:35  [ТС]     Вывод массива после сортировки #15
Вывод массива после сортировки
а если такой программный код:
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
cout<<endl<<"MACUB Do COPTyBAHH9"<<endl;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
  //=
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
        }
cout<<endl<<"Kpok Za Kpokom";
 for(i=0;i<PObject->GetSize()-1;i++)
 for(j=0;j<i;j++)
 {
 if(PObject->GetMassEL(j) > PObject->GetMassEL(j+1))
 {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(i+1));
        PObject->SetMassEL(i+1, tmp);
        }
 cout<<endl;
 for(k=0;k<PObject->GetSize();k++)
   cout<<PObject->GetMassEL(k)<<" ";
 }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
то
Вывод массива после сортировки
Вопщем я что то запутался.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.04.2010, 20:31     Вывод массива после сортировки #16
MAQSA, я когда там написал с выводом допустил опечатку. Сравнение и обмен происходит с индексами j, а не i.
Вот сортировка с пошаговым выводом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(i = 0; i < PObject->GetSize() - 1; ++i)
    for(j = 0; j < i; ++j)
    {
        if(PObject->GetMassEL(j) > PObject->GetMassEL(j + 1))
        {
            tmp = PObject->GetMassEL(j);
            PObject->SetMassEL(j, PObject->GetMassEL(j + 1));
            PObject->SetMassEL(j + 1, tmp);
        }
        std::cout<<std::endl;
        for(k = 0; k < PObject->GetSize(); ++k)
            cout<<PObject->GetMassEL(k)<<' ';
    }
Обычная сортировка выглядит так же, только без вывода. И я надеюсь, что вы понимаете, что сортировка с пошаговым выводом и обычная сортировка должны быть разными методами, в противном случае вы просто зря проделаете проверки, потому что массив будет уже отсортирован
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
29.04.2010, 15:36  [ТС]     Вывод массива после сортировки #17
Я догадувался что допустилась опечатка, так как умова была if(j>j+1) а дальше j не использувалося , но все же, я присотрелся так, и оно не делает последний обмен, и выдает результат без последнего обмена.
Так лутче будет сделать простую сортировку, а потом отдельно выберать пошаговою, попробую.

Добавлено через 16 часов 42 минуты
Я розобрался с пошаговым выводом, нашол все ошибки. Спасибо, у меня новый вопрос:
Как сделать рандом выбор символов, у которых ASCII-коды начинаются с [97-122]
char s=random(122); - это будет вывод всех символов до того символа, чей ASCII-код заканчивается на 122, а как сделать єто ограничения?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.04.2010, 21:13     Вывод массива после сортировки #18
C
1
char s = 97 + random(25);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2010, 19:41     Вывод массива после сортировки
Еще ссылки по теме:

Найти количество сравнений после сортировки массива C++
C++ Вывод отсортированного массива с индексами элементов до сортировки
Функция сортировки массива C++

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

Или воспользуйтесь поиском по форуму:
MAQSA
2 / 2 / 0
Регистрация: 18.04.2010
Сообщений: 119
06.05.2010, 19:41  [ТС]     Вывод массива после сортировки #19
Спасибо
Yandex
Объявления
06.05.2010, 19:41     Вывод массива после сортировки
Ответ Создать тему
Опции темы

Текущее время: 04:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru