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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
andyoO
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 68
#1

Сортировка методом пузырька - C++

28.04.2013, 00:04. Просмотров 826. Ответов 11
Метки нет (Все метки)

массив я задал, а вот сортировку не могу сделать((
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
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
 
int main()
{
   const int a=100, b=100;
   int i,j;
   double rows,cols;
   int matrix[a][b];
 
   std::cout<<"Enter rows from 1 to 20"<<std::endl;
   std::cin>>rows;
   while (rows!=int(rows) || rows<1 || rows>20)
   {
      std::cout<< "Enter rows from 1 to 20"<<std::endl;
      std::cin >> rows;
   }
   std::cout<<"Enter cols from 1 to 20"<<std::endl;
   std::cin>>cols;
   while (cols!=int(cols) || cols<1 || cols>20)
   {
      std::cout<< "Enter cols from 1 to 20"<<std::endl;
      std::cin >> cols;
   }
 
   for(i=0;i<cols;i++)
      for(j=0;j<rows;j++)
      {
         std::cout<<"Enter array element["<<i+1<<"]["<<j+1<<"]";                          //ввод членов массива
         std::cin>>matrix[i][j];
      }
 
   for(i=0;i<cols;i++)
   {
      for(j=0;j<rows;j++)
         std::cout << std::setw(5) << matrix[i][j];
      std::cout << std::endl;
   }
   return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,948
Записей в блоге: 2
Завершенные тесты: 1
28.04.2013, 00:08     Сортировка методом пузырька #2
Алгоритмы сортировок
andyoO
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 68
28.04.2013, 20:36  [ТС]     Сортировка методом пузырька #3
не пойму что означает tmp
template< class T > - и вот это, остальное ясно

Добавлено через 11 часов 0 минут
(
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
28.04.2013, 21:28     Сортировка методом пузырька #4
andyoO, а вы на это не обращайте внимания.Эта строка просто обобщает код - сортировка сортирует как перемеенные типа Int ,long etc. Просто почитайте сам код и запомните его - там всё просто
andyoO
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 68
01.05.2013, 17:27  [ТС]     Сортировка методом пузырька #5
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <ctime>
#include <windows.h> 
#include <clocale>
#include <string>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int main ()
{
   int i, j, el, m, k, kol= 0, w, last, first, mid, row, col, **ar,n,v,a,b;
    cout<< ("Enter rows ");
   cin>>row;
     cout<< ("Enter cols ");
   cin>>col;
   cout<<("\nMatrix:\n");
   ar= (int **)malloc (sizeof (int *) * row);
   for (i= 0; i < row; i++)
   {
   ar[i]= (int*)malloc (sizeof (int) * col);
      for (j= 0; j < col; j++)
      {
         ar[i][j]= rand () % 99;
         cout << std::setw(5) << ar[i][j];
      }
      cout<< ("\n");
   }
   cout<<("\n");
   cout<<("\n The desired values\n");
   for (i=1;i<row;i=i+2)
   { 
       for (j= 0; j < col; j=j+2)  
       cout << std::setw(5) << ar[i][j];
   cout<<("\n");}
   cout<< ("\n Enter the sequence of numbers ");         //искомый элемент
   cin>>el;
   
   cout<<("\nConsecutive method:\n");
      for (i= 1; i < row; i=i+2)
   {
      for (j= 0; j < col; j=j+2)
      {
         if (ar[i][j] == el)
         {
            kol++;
            printf("row %2d col %2d\n", i + 1, j + 1);
         }
      }
   }    
   if (kol == 0)
      printf("Not found\n");
  //Отсортированный массив
 for (j= 0; j < col; j++)
      for (m= 0; m < row - 1; m++)
         for (i= m + 1; i < row; i++)
         {               
            if (ar[i][j] < ar[m][j])
            {    
                w= ar[m][j];
                ar[m][j]= ar[i][j];
                ar[i][j]= w;
            }
         }
   for (i= 0; i < row; i++)
      for (n= 0; n < col - 1; n++)
         for (j= n+1; j < col; j++)
         {               
            if (ar[i][j] < ar[i][n])
            {    
                v= ar[i][n];
                ar[i][n]= ar[i][j];
                ar[i][j]= v;
            }
         }
   cout<< ("\nSorting by selection:\n");//в
   for (i= 0; i < row; i++)             //ы
       {                                //в
      for (j= 0; j < col; j++)          //о
   cout << std::setw(5) << ar[i][j];    //д
      cout<<("\n");                     //массива
   }
Прога неправильно сортирует массив, не подскажете в чем проблема?

Добавлено через 5 часов 20 минут
zitxbit
Master C/C++
87 / 739 / 75
Регистрация: 11.04.2012
Сообщений: 971
01.05.2013, 19:50     Сортировка методом пузырька #6
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <ctime>
#include <windows.h> 
#include <clocale>
#include <string>
#include <stdlib.h>
#include <conio.h>
using namespace std;
 
void swap(int& n1, int& n2);
 
int main ()
{
   int i, j, el, m, k, kol= 0, w, last, first, mid, row, col, **ar,n,v,a,b;
    cout<< ("Enter rows ");
   cin>>row;
     cout<< ("Enter cols ");
   cin>>col;
   cout<<("\nMatrix:\n");
   ar= (int **)malloc (sizeof (int *) * row);
   for (i= 0; i < row; i++)
   {
   ar[i]= (int*)malloc (sizeof (int) * col);
      for (j= 0; j < col; j++)
      {
         ar[i][j]= rand () % 99;
         cout << std::setw(5) << ar[i][j];
      }
      cout<< ("\n");
   }
   cout<<("\n");
   cout<<("\n The desired values\n");
   for (i=1;i<row;i=i+2)
   { 
       for (j= 0; j < col; j=j+2)  
       cout << std::setw(5) << ar[i][j];
   cout<<("\n");}
   cout<< ("\n Enter the sequence of numbers ");         //искомый элемент
   cin>>el;
 
    int i = N-1;
    for (int i = row-1, j = col-1; i >= 0 && j >= 0; j--)
    {
        int max_i = i, max_j = j;
        for (int m = i, n = j; m >= 0 && n >= 0; n--)
        {
            if (ar[m][n] > ar[max_i][max_j]) { max_i = m; max_j = n; }
            if (n <= 0) { m--; n = N; }
        }
 
        swap(ar[i][j], ar[max_i][max_j]);
        if (j <= 0) { i--; j = N; }
    }
 
   cout<< ("\nSorting by selection:\n");//в
   for (i= 0; i < row; i++)             //ы
       {                                //в
      for (j= 0; j < col; j++)          //о
   cout << std::setw(5) << ar[i][j];    //д
      cout<<("\n");                     //массива
   }
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
Мой исходник:
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
void swap(int& n1, int& n2);
 
int main(int argc, char* argv[])
{
    int** A = new int*[N];
    memset((void*)A, 0x00, sizeof(int*) * N);
 
    for (int k1 = 0; k1 < N; k1++)
    {
        A[k1] = new int[N];
        for (int k2 = 0; k2 < N; k2++)
        {
            A[k1][k2] = rand() % (N-1) + 1;
            printf("%d ",A[k1][k2]);
        }
 
        printf("\n");
    }
 
    printf("\n");
 
    int i = N-1;
    for (int i = N-1, j = N-1; i >= 0 && j >= 0; j--)
    {
        int max_i = i, max_j = j;
        for (int m = i, n = j; m >= 0 && n >= 0; n--)
        {
            if (A[m][n] > A[max_i][max_j]) { max_i = m; max_j = n; }
            if (n <= 0) { m--; n = N; }
        }
 
        swap(A[i][j], A[max_i][max_j]);
        if (j <= 0) { i--; j = N; }
    }
 
    for (int r1 = 0; r1 < N; r1++)
    {
        for (int r2 = 0; r2 < N; r2++)
            printf("%d ",A[r1][r2]);
 
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
http://codepad.org/Ub1PErhj
Миниатюры
Сортировка методом пузырька  
andyoO
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 68
07.05.2013, 00:24  [ТС]     Сортировка методом пузырька #7
ребят, подскажите, как исправить выход за пределы массива, я чет вообще не соображу никак(
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <ctime>
#include <windows.h> 
#include <clocale>
#include <string>
#include <stdlib.h>
#include <conio.h>
using namespace std;
 
int main()
{ setlocale(0,"");
srand (time(NULL));
   int i, j, el, m, k,l, kol= 0, w, last, first, mid, row, col, **ar,n,v,a,b,temp,c,N,M;
    cout<< ("Введите количество строк: ");
   cin>>row;
     cout<< ("Введите количество столбцов: ");
   cin>>col;
   cout<<("\nМаcсив:\n");
   ar= (int **)malloc (sizeof (int *) * row);
   for (i= 0; i < row; i++)
   {
   ar[i]= (int*)malloc (sizeof (int) * col);
      for (j= 0; j < col; j++)
      {
         ar[i][j]= rand () % 99;
         cout << std::setw(5) << ar[i][j];
      }
      cout<< ("\n");
   }
   cout<<("\n");
   cout<<("\nИскомая матрица\n");
   for (i=1;i<row;i=i+2)
   { 
       for (j= 0; j < col; j=j+2)  
       cout << std::setw(5) << ar[i][j];
   cout<<("\n");}
   cout<<("\nВведите количество искомых элементов:");
   cin>>M;
   for (N=0;N<M;N++)
   {printf ("\nВведите %2d искомый элемент: ",N+1);         //искомый элемент
   cin>>el;
   // Последовательный поиск
   
   cout<<("\nПоследовательный поиск:\n");
   for (j= 0; j < col; j+=2)
   {
      for (i= 1; i < row; i+=2)
      {
         if (ar[i][j] == el)
         {
            kol++;
            cout<<("\nИскомый элемент найден в четных строках и нечетных столбцах:\n");
            printf("%2d строка %2d столбец \n", i + 1, j + 1);
         }
      }
   }    
   if (kol == 0)
      printf("Искомый элемент не найден в четных строках и нечетных столбцах\n"); 
   }
 for (int k=0; k<row;++k)
 { 
     for(int l=0;l<col;++l)
   { 
       for(int i=0; i<row;++i)
     { 
         for(int j=0; j<col;++j)
        {
           if (i+1 == row && j+1==col)
              {
               continue;
               }
           else
              {
                if(j+1 == col &&  ar[i][j]>ar[i+1][0])
                  {
                    int temp=ar[i][j];
                    ar[i][j]=ar[i+1][0];
                    ar[i+1][0]=temp;
                  }
           else
              {
                 if (ar[i][j]>ar[i][j+1])
                   {
                     int temp=ar[i][j];
                     ar[i][j]=ar[i][j+1];
                     ar[i][j+1]=temp;
                   }
              }
              }
        }
     }
   }
 }
 
 
 
   cout<< ("\nОтсортированный массив:\n");  //вывод массива
   for (i= 0; i < row; i++)                 
       {                                   
      for (j= 0; j < col; j++)   
          {                               
          printf("%4i", ar[i][j]);}                                  
      cout<<("\n");                     
       }
   cout<<"\n";
 
   return 0;
}
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
07.05.2013, 00:47     Сортировка методом пузырька #8
Допустим двумерная матрица. Matrix[x][y].
И делаешь проверку if(i либо j >= y) break; Как-то так.
andyoO
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 68
07.05.2013, 11:34  [ТС]     Сортировка методом пузырька #9
что мы принимаем за y? я не особо понимаю..

Добавлено через 10 часов 43 минуты
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
07.05.2013, 11:56     Сортировка методом пузырька #10
Пример как лично я думаю.
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 <fstream>
#include <iostream>
#include <Windows>
#include <conio.h>
using namespace std;
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int x = 3, y = 3;  //максимумы массива.
int mas[3][3];
for(int i = 0; i < 5; i++) //тут явно цикл выйдет за пределы массива
for(int j = 0; j < 5; j++)
{
if(i >= x) break; //Если выходим либо дошли до границы то выходим.
if(j >= y) break; //Если выходим либо дошли до границы то выходим.
cin >> mas[i][j];
}
for(int i = 0; i < x; i++)       //выведим массив
for(int j = 0; j < y; j++)
{
cout <<  mas[i][j] << " ";
}
 
system("PAUSE");
}
Oxie
Заблокирован
03.05.2014, 09:55     Сортировка методом пузырька #11
Это то что надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 18:47     Сортировка методом пузырька
Еще ссылки по теме:

C++ Сортировка методом пузырька
Сортировка методом пузырька C++
C++ Сортировка методом пузырька
C++ Сортировка методом пузырька
C++ Сортировка методом пузырька

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

Или воспользуйтесь поиском по форуму:
deadlinishe
7 / 7 / 1
Регистрация: 03.05.2014
Сообщений: 143
05.05.2014, 18:47     Сортировка методом пузырька #12
3 раз за сегодня bubble sort кидаю=))
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
#include <iostream>
using namespace std;
int array[100];
void*Sort(int col) 
{
    int trash=0;
 
    for (int i=1; i<=col ; i++)
    {
 
        for (int j=1; j<=col-i; j++) 
        {
 
            if (array [j]>array [j+1]) 
            {
 
                trash=array[j]; 
                array [j]=array [j+1];
                array [j+1]=trash;
            }
        }
    }
}
 
void*Out(int col)
{
    for (int i=1; i<=col; i++) 
    cout << array [i] <<" ";
    cout << endl; 
}
int main()
{
    int col_el;
    cout << " Vvedite dlinnu masiva"<< endl;
    cin >> col_el;
    for (int n=1; n<=col_el ; n++)
    cin >> array[n];
    Sort(col_el);
    cout << "Resultat:"<<endl;
    Out(col_el);
    cin >> col_el;
    return 0;
}
Yandex
Объявления
05.05.2014, 18:47     Сортировка методом пузырька
Ответ Создать тему
Опции темы

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