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

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

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

Блинная сортировка массива, не сортируется последний элемент - C++

15.07.2015, 10:37. Просмотров 401. Ответов 12
Метки нет (Все метки)

Товарищи офицеры. Прошу посмотреть мой код блинной сортировки для одномерного массива. Дело в том что он не сортирует последний элемент. Что ни делал-все напрастно.
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
#include <iostream>
#include<windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
int main() {//pancakes
    //srand(time(0));
    const int n=10;
    int arr[n],max=0,a=0;
    for(int i=0;i<n;i++){
        arr[i]=5+rand()%40;
        cout<<" "<<arr[i]<<"--";
    }
    cout<<endl;
    for(int j=n-1;j>=0;j--){
    max=0;
    a++;
     for(int i=a;i<n;i++){      
        if(arr[i]>arr[max])
        max=i;
             }
   
    cout<<max<<"+"<<endl;
    cout<<arr[max]<<endl;
    cout<<endl<<endl;
 
    for(int j=n-1,i=max;i<j;i++,j--){
      swap(arr[j],arr[i]);
      cout<<arr[i]<<"++";
  }
        for(int i=a,j=n-1;i<j;i++,j--){
        
        swap(arr[i],arr[j]);
        cout<<arr[i]<<"*";
      }
}
           
    for(int i=0;i<n;i++)
    cout<<arr[i]<<endl;
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2015, 10:37     Блинная сортировка массива, не сортируется последний элемент
Посмотрите здесь:

Заменить последний положительный элемент массива на второй элемент массива - C++
Заменить последний положительный элемент массива на второй элемент массива. Как вывести еще раз этот же массив только с замененным числом ...

Сортировка дублирует последний элемент - C++
// одномерный массивы.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Если последний элемент массива положителен, то все элементы массива увеличить на квадрат его максимального элемента - C++
Задача: Задан одномерный массив F(N) (N&lt;=60). Если последний элемент массива положителен, то все элементы массива увеличить на квадрат...

Удалить последний элемент массива - C++
Может кто помочь как можно удалить последний элемент массива, токо не используя встроеных стеков деков списков и .т.д ?

Последний элемент незаполненного массива - C++
Как определить индекс последнего заполненного элемента массива charo'в? Допустим, есть массив str Он заполнены содержимым &quot;qwerty123&quot; и...

Последний элемент линейного массива - C++
Добрый день, уважаемые программисты. Ответьте, пожалуйста, как найти последний элемент линейного массива действительных чисел.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.07.2015, 10:50     Блинная сортировка массива, не сортируется последний элемент #2
Откомментируй свой код, какая его часть что делает.
Вообще лучше бы его разбить на функции.
наглый
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 10
15.07.2015, 11:21  [ТС]     Блинная сортировка массива, не сортируется последний элемент #3
kozlik_kozlik, На счет функций согласен, но требуеться написать именно с помощью цыклов и массивов. Такое вот условие.
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
#include <iostream>
#include<windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
int main() {//pancakes
//srand(time(0));
const int n=10;// заряжает массив рандомными элементами.
int arr[n],max=0,a=0;
for(int i=0;i<n;i++){
arr[i]=5+rand()%40;
cout<<" "<<arr[i]<<"--";
}
cout<<endl;
for(int j=n-1;j>=0;j--){//именно здесь возникает проблемма, остальные элементы чикают как часики ))
max=0;//
a++;
for(int i=a;i<n;i++){   //поиск максимального элемента массива. 
if(arr[i]>arr[max])
max=i;
}
 
cout<<max<<"+"<<endl;
cout<<arr[max]<<endl;
cout<<endl<<endl;
 
for(int j=n-1,i=max;i<j;i++,j--){//Переворачивает часть массива во главе с макс элементом, макс 
swap(arr[j],arr[i]);//выходит на вершок блинной стопки.
cout<<arr[i]<<"++";
}
for(int i=a,j=n-1;i<j;i++,j--){//Переворачивает весь массив так чтобы макс оказался 
//в основе блинной стопки
 
swap(arr[i],arr[j]);
cout<<arr[i]<<"*";
}
}//возвращает к основному цыклу с шагом +1 оста влая в следствии остортированные 
//элементы не тронутыми
 
for(int i=0;i<n;i++)//выводит отсортированный массив.
cout<<arr[i]<<endl;
getch();
return 0;
}
Maksumko
12 / 12 / 4
Регистрация: 13.06.2015
Сообщений: 60
15.07.2015, 11:29     Блинная сортировка массива, не сортируется последний элемент #4
извините только учусь , скажите ета програма должна сортировать рендром.массив от мин к макс или как ?
наглый
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 10
15.07.2015, 11:36  [ТС]     Блинная сортировка массива, не сортируется последний элемент #5
Maksumko, Maksumko, Я тоже только начинаю )). Ну да от макс до мин. Но не вкладкой или там пузырьком, а именно "болтать весь массив", то есть перекидывать лопаткой стопку блинов.))
Maksumko
12 / 12 / 4
Регистрация: 13.06.2015
Сообщений: 60
15.07.2015, 11:41     Блинная сортировка массива, не сортируется последний элемент #6
есле стопка ето пара то берем берем arr[1] и arr[2] ( как бы одну пару и меняем местами с arr[3] и arr[4] ? )
наглый
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 10
15.07.2015, 11:52  [ТС]     Блинная сортировка массива, не сортируется последний элемент #7
Maksumko, Не совсем. Если стопка arr[1] arr[3] arr[4] arr[2]. меняем arr[1]arr[3]arr[2]arr[4] затем arr[4] arr[2] arr[3] arr[1]. затем arr[4]arr[2]arr[1]arr[3] затем arr[4] arr[3] arr [2] arr[1]. можно проверять, если стоит на свох местах то болтать не надо. Но в начале надо что бы код нормально заработал.
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.07.2015, 11:52     Блинная сортировка массива, не сортируется последний элемент #8
А ты уверен, что правильно понял алгоритм? Под блинной сортировкой обычно подразумевают вот что: нашёл максимальный элемент - перевернул всё от него до конца, отправив его в конец, взял оставшуюся часть массива, сделал то же самое и так далее.

Попробуй вот такой массив
C++ (Qt)
1
int arr[n]={100, 32, 19, 25, 14, 9, 43, 43, 7, 29}
Получится лютый бред, результат близко не похож на отсортированный.

C++ (Qt)
1
2
3
4
5
6
        for(int i=a,j=n-1;i<j;i++,j--){//Переворачивает весь массив так чтобы макс оказался
            //в основе блинной стопки
 
            swap(arr[i],arr[j]);
           // cout<<arr[i]<<"*";
        }
Вот это вот делается зачем?
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
15.07.2015, 11:56     Блинная сортировка массива, не сортируется последний элемент #9
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
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
int main() { //pancakes
//srand(time(0));
    const int n = 25; // заряжает массив рандомными элементами.
    int arr[n], ind_max = 0;
    for (int i = 0; i < n; i++) {
        arr[i] = 5 + rand() % 40;
        cout << " " << arr[i] << "--";
    }
    cout << endl;
    for (int cur_size = n; cur_size > 1; cur_size--) { //именно здесь возникает проблемма, остальные элементы чикают как часики ))
        ind_max = 0; //
        for (int ind = 0; ind < cur_size; ind++) { //поиск максимального элемента массива.
            if (arr[ind] > arr[ind_max])
                ind_max = ind;
        }
        if (ind_max == cur_size - 1)
            continue;
        for (int j = 0, i = ind_max; j < i; i--, j++) { //Переворачивает часть массива во главе с макс элементом, макс
            swap(arr[j], arr[i]); //выходит на вершок блинной стопки.
 
        }
        for (int i = 0, j = cur_size - 1; i < j; i++, j--) { //Переворачивает весь массив так чтобы макс оказался
            swap(arr[i], arr[j]);
 
        }
    }
    for (int i = 0; i < n; i++) //выводит отсортированный массив.
        cout << arr[i] << " ";
 
    //getch();
    return 0;
}
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.07.2015, 11:58     Блинная сортировка массива, не сортируется последний элемент #10
C++ (Qt)
1
2
//возвращает к основному цыклу с шагом +1 оста влая в следствии остортированные 
//элементы не тронутыми
Где это они не тронуты? Каждый раз попадают в новое место. Они не остаются в хвосте, с алгоритмом что-то совсем нехорошее. Подход неправильный.
наглый
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 10
15.07.2015, 11:59  [ТС]     Блинная сортировка массива, не сортируется последний элемент #11
kozlik_kozlik, Вот рабочий код для моей версии. Но сортирует как бэ макс оказываеться на верху. Надо еще один цыкл чтобы перевернуть весь массив. Неэффективно (
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
#include <iostream>
#include<windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
int main() {//pancakes
    srand(time(0));
    const int n=20;
    int arr[n],max;
    for(int i=0;i<n;i++){
        arr[i]=5+rand()%40;
        cout<<" "<<arr[i]<<"--";
    }
    
     for(int i=0;i<=n;i++){
        max=0;
        for(int j=0;j<=n-1-i;j++)
        arr[j]<arr[max]?:max=j;
    
        for(int a=0,j=max;a<max;a++,j--)
            swap(arr[a],arr[j]);                            
        for(int a=0,j=n-i-1;a<j;a++,j--)
        swap(arr[a],arr[j]);
    
    }
        for(int i=0;i<n;i++){
        cout<<" "<<arr[i]<<"*";
    }
    getch();
    return 0;
}
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.07.2015, 12:02     Блинная сортировка массива, не сортируется последний элемент #12
vua72, так нечестно, пусть сам страдает XD

Добавлено через 54 секунды
Ну и если уж на то пошло...
C++ (Qt)
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
#include <iostream>
#include<windows.h>
#include <conio.h>
#include <ctime>
using namespace std;
 
int maximal_index(int n, int array[])
{
    int max_index=0;
 
    for(int i=0;i<n;i++)
    {
        if(array[i]>array[max_index])
            max_index=i;
    }
 
    return max_index;
 
}
 
void array_printout(int ar[], int N)
{
    for (int i=0; i<N; i++)
        cout << ar[i] << "\t";
    cout << endl;
}
 
int main() {
    //pancakes
    //srand(time(0));
    const int n=10;
 
 
    //создаём массив, заполняем, выводим
    int arr[n],max=0,a=0;
    for(int i=0;i<n;i++){
        arr[i]=5+rand()%40;
        //cout<<" "<<arr[i]<<"--";
    }
    array_printout(arr, n);
 
 
    for(int j=n-1-a;j>=0;j--)
    {
        cout << endl << a+1 << " iteration" << endl;
 
        max=maximal_index(n-a, arr);
 
        cout<<max<<"+"<<endl;
        cout<<arr[max]<<endl;
        cout<<endl<<endl;
 
//чтобы не вертеть, если максимальное значение уже на своём месте
        if (!(max==j))
        {
//переворачиваем массив от максимального значения до хвоста, точнее тех элементов, которые уже отсортированы
            for(int j=n-1-a,i=max;i<j;i++,j--)
            {
                swap(arr[j],arr[i]);
                //cout<<arr[i]<<"++";
            }
 
 
            cout << "after swap of end..." << endl;
            array_printout(arr, n);
        }
 
        a++;
 
    }
 
    for(int i=0;i<n;i++)
        cout<<arr[i]<<endl;
    getch();
    return 0;
}
Надо будет - сам заменишь функции на циклы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 12:09     Блинная сортировка массива, не сортируется последний элемент
Еще ссылки по теме:

Удалить из массива последний отриц. элемент - C++
Всем доброй ночи! Очень нужна помощь с программой, так как завтра защищать лабараторную, получать допуск к сессии....

Удалить из массива последний парный элемент - C++
Есть код, он рабочий и все хорошо с ним, но нужно что бы в результате выводящий ноль был справа, а не слева. Само задание: Заданный...

Переставить первый и последний элемент массива - C++
Доброго времени суток. Хочу переставить первый и последний элемент массива. Но что-то я неправильно делаю. #include &lt;iostream&gt; ...

Удалить из массива последний отрицательный элемент. - C++
Добрый день! Помогите с решением задачи. ...


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

Или воспользуйтесь поиском по форуму:
наглый
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 10
15.07.2015, 12:09  [ТС]     Блинная сортировка массива, не сортируется последний элемент #13
kozlik_kozlik, Премного благодарен. Лаконично и доходчиво!!
Yandex
Объявления
15.07.2015, 12:09     Блинная сортировка массива, не сортируется последний элемент
Ответ Создать тему
Опции темы

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