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

Сортировка массив действительных чисел по возрастанию - C++

Восстановить пароль Регистрация
 
Sinsei
3 / 3 / 0
Регистрация: 09.03.2011
Сообщений: 247
21.03.2011, 18:09     Сортировка массив действительных чисел по возрастанию #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
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,"Rus");
const int i=100;
int n;
double mas[i];
cout<<"Введите количество элементов массива (100 Max): ";
cin>>n;
if ((n<=0)||(n>100))
{
  cout<<"Введите от 0 до 100";
}
else
{
    for(int i=0; i<n; i++)
    {
        cout<<"Элемент #"<<i+1<<"= ";
        cin>>mas[i];
    }
 
}
 
    system ("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.03.2011, 18:10     Сортировка массив действительных чисел по возрастанию #2
Алгоритмы сортировок
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
21.03.2011, 18:37     Сортировка массив действительных чисел по возрастанию #3
Недавно написал программу.
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
 
void inp(int** x,int n);
void collumn(int** x,int n);
void row(int** x,int n);
void out(int** x,int n);
void oj(int**x ,int n,int* y);
int oj(int** x,int n);
 
void main()
{
        int n;
        cout<<"n=";
        cin>>n;
        char select;
      int* y;
      int m;
        int** x=new int*[n];
 
        for(int i=0;i<n;i++)
                x[i]=new int[n];
 
                cout<<"Enter i for input"
                        <<endl<<"Enter c for collumn sort"
                        <<endl<<"Enter r for row sort"
                        <<endl<<"Enter o for out"
                        <<endl<<"Enter x for operation"
                  <<endl<<"Enter e for exit"
                        <<endl;
        for(;;)
        {
                
                        cin>>select;
                switch(select)
                {
            case 'i':
            case'I':
                     inp(x,n);
                     cout<<"complite"<<endl;
                        break;
                case 'c':
            case'C':
                     collumn(x,n);
                     cout<<"complite"<<endl;
                        break;
                case 'r':
            case 'R':
                     row(x,n);
                     cout<<"complite"<<endl;
                        break;
                case 'o':
            case 'O':
                     out(x,n);
                     cout<<"complite"<<endl;
 
                  break;
            case 'x':
            case 'X':
                  m=oj(x,n);
                  y=new int[m];
                  oj(x,n,y);
                  cout<<"complite"<<endl;
               //   delete[]y;
                        break;
                case 'e':
            case 'E':
                     return;
 
                        default: cout<<"Wrong command!"<<endl;
 
                }
 
        }
        for(i=0;i<n;i++)
                delete[] x[i];
 
        delete[] x;
 
}
 
 
void inp(int** x,int n)
{
        srand(time(0));
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                        *(*(x+i)+j)=rand()%10;
}
 
void out(int** x,int n)
{
        for(int i=0;i<n;i++)
                {
                        for(int j=0;j<n;j++)
                                cout<<*(*(x+i)+j)<<" ";
                        cout<<endl;
        }
        cout<<endl;
}
 
void collumn(int** x,int n)
{
        int buff;
        bool t;
        
          for(int j=0;j<n;j++)
         {
            t=0;
            while(t==0)
               {
               t=1;
                    for(int i=0;i<n-1;i++)
                      if(*(*(x+i)+j)>*(*(x+i+1)+j))
                        {
                            buff=*(*(x+i)+j);
                            *(*(x+i)+j)=*(*(x+i+1)+j);
                            *(*(x+i+1)+j)=buff;
                            t=0;
                        }
               }
        }      
}
 
 
void row(int** x,int n)
{
        int buff;
        bool t;
             for(int i=0;i<n;i++)
          {   
             t=0;
             while(t==0)
                {
                        t=1;
                        for(int j=0;j<n-1;j++)
                          if(*(*(x+i)+j)>*(*(x+i)+j+1))
                            {
                              buff=*(*(x+i)+j);
                              *(*(x+i)+j)=*(*(x+i)+j+1);
                              *(*(x+i)+j+1)=buff;
                              t=0;
                     }  
               }
          }
}
 
 
int oj(int** x,int n)
{
   int s=0;
   for(int i=1;i<n;i++)
      for(int j=n-1; j>n-1-i;j--)
         s++;
   return s;
}
 
void oj(int**x ,int n,int* y)
{
   int c=0;
   for(int i=1;i<n;i++)
      for(int j=n-1;j>n-1-i;j--)
      {
         *(y+c++)=*(*(x+i)+j);
         cout<<*(y+c++)<<" ";
      }
 
   cout<<endl;
}
Ариман
20 / 20 / 1
Регистрация: 18.09.2010
Сообщений: 28
21.03.2011, 19:41     Сортировка массив действительных чисел по возрастанию #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{ const int n=15;
    int arr[n]={0};
srand(time(NULL));
for(int i=0;i<n;i++)
arr[i]=rand()%45;
/////////////////////////////////////////
for(int k=0;k<n-1;k++)//сортировка тут
for(int j=0;j<n-1;j++)
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
cout<<"Sorted array"<<endl;
for(i=0;i<n;i++)
cout<<arr[i]<<endl;
}
я тут тупо задал масив и заполнил его случайными числами а сортировку взял простейшую пузырьковую ,для перестановки элементов использовал функцию swap ....надеюсь я правильно понял условие задачи ..
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.03.2011, 19:43     Сортировка массив действительных чисел по возрастанию #5
Ариман, функция swap () описана в библиотеке algorithm.
Без её подключения будет ошибка.
Ариман
20 / 20 / 1
Регистрация: 18.09.2010
Сообщений: 28
21.03.2011, 19:46     Сортировка массив действительных чисел по возрастанию #6
странно я прогнал её в компиляторе и никакой ошибки не выскочило .Да и в учебнике небыло никакого алгоритм,юзаю правда старую 6 версию висуал студио. По крайней мере у меня все работает
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.03.2011, 19:52     Сортировка массив действительных чисел по возрастанию #7
Ариман, http://www.cplusplus.com/reference/algorithm/swap/
По правилам нужно подключить)
Ариман
20 / 20 / 1
Регистрация: 18.09.2010
Сообщений: 28
21.03.2011, 19:54     Сортировка массив действительных чисел по возрастанию #8
Ну в любом случае спасибо впредь буду знать.
Screenly
2 / 2 / 0
Регистрация: 14.03.2011
Сообщений: 27
21.03.2011, 20:28     Сортировка массив действительных чисел по возрастанию #9
А как сделать, чтобы пользователь задавал кол-во элементов массива, далее создавалось 2 массива (нужного размера), заполнялись случайно, потом производилось их слияние и после этого сортировка и вывод получившегося массива??
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.03.2011, 20:34     Сортировка массив действительных чисел по возрастанию #10
Я бы это сделал с помощью последовательного контейнера vector.
Но вам я думаю лучше воспользоваться динамическим массивом (воспользуйтесь поиском по форуму).

Слияние массивов можно сделать с помощью алгоритма merge (описан в библиотеке algorithm).
Сортировка с помощью алгоритма sort (algorithm).

Ну или руками все это реализовывать, можно тоже попробовать поискать по форуму.
Screenly
2 / 2 / 0
Регистрация: 14.03.2011
Сообщений: 27
21.03.2011, 22:34     Сортировка массив действительных чисел по возрастанию #11
Цитата Сообщение от neske Посмотреть сообщение
Я бы это сделал с помощью последовательного контейнера vector.
Но вам я думаю лучше воспользоваться динамическим массивом (воспользуйтесь поиском по форуму).

Слияние массивов можно сделать с помощью алгоритма merge (описан в библиотеке algorithm).
Сортировка с помощью алгоритма sort (algorithm).

Ну или руками все это реализовывать, можно тоже попробовать поискать по форуму.
Мне желательно без дополнительных библиотек. Т.к. потом это все нужно объяснять преподавателю, а мы еще не дошли до различных других библиотек. Объединить 2 динамических массива в 1 на данный момент не удалось(

*массивы должны быть динамическими, заполняются методом rand(); размерность задает пользователь

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
                int* A; 
        int size1,i;
        cout << "Введите размер первого массива: ";
        cin >> size1;
        A = new int [size1];
        cout << "Первый массив: ";
        for (i = 0; i < size1; i++)
        {
            A[i]=rand()%100; 
            cout << A[i] << " ";
        };
так же делается 2ой массив. А как их объединить 3им - вот загадка века, для меня =( порылся по форуму, не нашел
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 22:40     Сортировка массив действительных чисел по возрастанию
Еще ссылки по теме:

C++ Упорядочить обменом массив действительных чисел по возрастанию
Записать в файл n действительных чисел в заданном диапазоне, затем упорядочить их по возрастанию C++
C++ Дан массив a из n действительных чисел

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

Или воспользуйтесь поиском по форуму:
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
21.03.2011, 22:40     Сортировка массив действительных чисел по возрастанию #12
Screenly, вам крупно повезло))
Нашел я на форуме код, давно когда-то кому-то писал.

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
#include <iostream>
void func_sort (int *, int);
 
int main ()
{
    const int size=5;
    int MAS_one[size]={1,3,5,7,9};
    int MAS_two[size]={2,4,6,8,10};
    int MAS_rez[size*2];
 
    for (int i=0; i<size; i++) { // просто объединяем.
        MAS_rez[i]=MAS_one[i];
        MAS_rez[i+size]=MAS_two[i]; }
 
    func_sort (MAS_rez, size*2); // вызываем функцию сортировки.
    for (int i=0; i<size*2; i++)
    std::cout<< " " << MAS_rez[i];
 
    std::cout << std::endl;
    system ("pause");
    return 0;
}
 
void func_sort (int *MAS, int size) // тут мы сортируем пузырьком.
{
    int tmp;
 
    for(int i=0; i < size; i++)
        for(int j = size-1; j > i; j-- )
        if ( MAS[j-1] > MAS[j] ) {
      tmp=MAS[j-1]; MAS[j-1]=MAS[j]; MAS[j]=tmp; }
}
Тут массивы статические, на динамику сами измените.
Yandex
Объявления
21.03.2011, 22:40     Сортировка массив действительных чисел по возрастанию
Ответ Создать тему
Опции темы

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