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

Быстрая сортировка. Разбить массив на 2 части левую сортировать по убыванию правую по возрастанию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Односвязный список (реализация без классов) http://www.cyberforum.ru/cpp-beginners/thread1139868.html
Задача проста: создать список из слов, вводимых с клавиатуры, и вывести его на консоль. Всё вводит и выводит. Только откуда-то взялась "Д" в начале списка (см. вложение). Собственно, откуда она берется и как её ликвидировать? Код: #include <cstdlib> #include <iostream> #define M 5 using namespace std; struct WORDS {
C++ Чтение из файла в Матрицу Добрый Ночи! Всем классного настроения! Ищу совета от более опытных пользователей. Подскажите, пожалуйста, как можно читать в матрицу(массив) из файла, для реализации моего проекта. Матрица готова, посчиталась и сохранилась в файл. Теперь нужно взять загрузить из файла на экран по очереди каждую строчку, и при желании крутить туда сюда. 3 2 -5 -1 2 -1 3 13 1 2 -1 9 1 2 -1 9 2 -1 3... http://www.cyberforum.ru/cpp-beginners/thread1139851.html
C++ Программа работы с файлом, отображенным в память
у меня есть проблемка, дана программа в методичке, нужно откомпилировать, я питался что-то сделать, но выскакует одна ошибка, прошу вашей помощи!!!Пожалуйста! вот методичка(лаба 4) и скрин ошибки. //#include "EvryThng.h" //#include "Everything.h" #define BUF_SIZE 160
C++ Почему не работает наследование?
Пытаюсь присвоить полям производного класса поля базового,но выводит мусор. В чем проблема? #include "stdafx.h" #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std;
C++ Error C3861 delete_list идентификатор не найден http://www.cyberforum.ru/cpp-beginners/thread1139835.html
Помогите разобраться с ошибкой, ругается на delete_list(&tail); #include "stdafx.h" #include <iostream> using namespace std; #include <conio.h> struct list2 { char name_nach; char name_konech;
C++ Error C2440 невозможно преобразовать char в char двунаправленный список помогите разобраться с ошибкой #include "stdafx.h" #include <iostream> using namespace std; #include <conio.h> struct list2 { char name_nach; подробнее

Показать сообщение отдельно
Mikhail1990
9 / 9 / 1
Регистрация: 22.03.2014
Сообщений: 155
05.04.2014, 21:15     Быстрая сортировка. Разбить массив на 2 части левую сортировать по убыванию правую по возрастанию
Товарищи помогите пожалуйста. Началась новая тема рекурсия не совсем въехал.
Задача следующая =>
Кликните здесь для просмотра всего текста
Дан массив из 20 целых чисел со значениями от 1 до 20 по порядку без повторов.
Необходимо:
-написать функцию, разбрасывающую элементы массива произвольным образом;
-создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве;
-отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию,
а элементы массива, находящиеся справа от найденной позиции по возрастанию.


Сам код =>
Кликните здесь для просмотра всего текста
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
int Mas_random(int mas[], int size) //заполнение массива рандомом
{
    srand((unsigned)time(NULL));
    int mas_help[20]={0}; //доп массив для разброса значений
    int row=0, help=size-1;
    while (help>=0)
    {
        row=rand()%20;              //генерируем рандом позицию элемента
        if(mas_help[row]==0)        //если генерируемая позиция равна 0 то
        {
            mas_help[row]=mas[help];    //присваиваем доп массиву элемент соответствующий номеру позиции mas[help]
            help--;                     //отнимаем 1 если заполнили
        }
    }
 
    for(int i=0; i<size; i++)mas[i]=mas_help[i]; //передаем значения с доп массива в оригинальный
 
    row=rand()%20+1;
    for(int i=0; i<size; i++) //выбор рандом позиции в массиве
    {
        if(mas[i]==row)
            return i;
    }
    /*for(int i=0; i<size; i++)
    {
        if(i==10)cout<<endl;
        cout<<setw(3)<<mas[i]<<' ';
    }
    cout<<"\n\n";
    for(int i=0; i<size; i++)
    {
        if(i==10)cout<<endl;
        cout<<setw(3)<<mas_help[i]<<' ';
    }
    cout<<"\n";*/
}
 
void Quick_sort_left(int mas[], int sortposition)   //сортировка по убыванию от позиции sortposition
{
    int left=0, right=sortposition;                                         //поставить указатели на исходные места
    int temp=0, central=0;
    central=mas[sortposition/2];                                            //центральный элемент
        
    do {                                                            //процедура разделения
        while (mas[left]>central) left++;
        while (mas[right]<central) right--;
 
        if (left<=right)
        {
            temp=mas[left];
            mas[left]=mas[right];
            mas[right]=temp;
            left++;
            right--;
        }
    }while (left<=right);
 
    if (right>0) Quick_sort_left(mas, right);               //рекурсивные вызовы, если есть, что сортировать
    if (sortposition>left) Quick_sort_left(mas+left, sortposition-left);
}
 
void Quick_sort_right(int mas[], int sortposition, int size)        //сортировка по возрастанию от позиции sortposition
{
    int left=sortposition, right=size;                                  //поставить указатели на исходные места
    int temp=0, central=0;
    central=mas[(sortposition/2)+sortposition];                                         //центральный элемент
        
    do {                                                            //процедура разделения
        while (mas[left]<central) left++;
        while (mas[right]>central) right--;
 
        if (left>=right)
        {
            temp=mas[left];
            mas[left]=mas[right];
            mas[right]=temp;
            left++;
            right--;
        }
    }while (left>=right);
 
    if (right>sortposition) Quick_sort_right(mas, right, size);                 //рекурсивные вызовы, если есть, что сортировать
    if (size>left) Quick_sort_right(mas-left, size+left, size);
}
 
void main()
{
    const int size=20;
    int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, sortposition=0;
 
    sortposition=Mas_random(mas, size);             //возвращает позицию от которой будет сортировать по возростанию и убыванию
    Quick_sort_left(mas, sortposition);             //процедура сортировки  левой стороны
    Quick_sort_right(mas, sortposition, size-1);     //процедура сортировки правой стороны
 
    for(int i=0; i<size; i++)               //вывод массива отсортированного
    {
        if(i==10)cout<<endl;
        cout<<setw(3)<<mas[i]<<' ';
    }
    cout<<"\n\n"<<sortposition<<endl;
}

Первую часть до рандом позиции сортирует а вот вторую половину не могу. Ошибка на этапе компиляции.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru