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

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

Войти
Регистрация
Восстановить пароль
 
lesha 13
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 20
#1

Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию - C++

29.05.2014, 01:03. Просмотров 677. Ответов 4
Метки нет (Все метки)

Имеется одномерный массив длиной N = 50. Отсортировать методом быстрой сортировки элементы массива, стоящие на четных позициях, так, чтобы они располагались по убыванию. Заполнение массива оператором случайных чисел Random.
Есть код, не могу понять в чем ошибка. Получается, что массив сортируется по частям, а не весь, как нужно. Исправьте, пожалуйста.
Код:
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
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
void quicksort(int *mas, int begin, int end) 
{
       int mid, a; 
       int f=begin, l=end;
       mid=mas[(f+l) / 2];
       do
       {
             while (mas[f]>mid) f++;
             if ((f+1)%2!=0)
                     f++;
             while (mas[l]<mid) l--;
             if ((l+1)%2!=0)l--;
             if (f<=l)
             {
                    a=mas[f];
                    mas[f]=mas[l];
                    mas[l]=a;
                    f++; 
                    l--;
             }
             else f++, l--;
       }
       while (f<l);
       if (begin<l) quicksort(mas, begin, l);
       if (f<end) quicksort(mas, f, end);
}
 void gener()
{
       int const n=50 ;
       int begin, end;
       int *Arr=new int[n];
       for (int i=0; i<n; i++)
       {
             Arr[i]=rand()%35;
             cout<<Arr[i]<<" ";
       }
       begin=0; end=n-1;
       quicksort(Arr, begin, end);
       cout<<endl;
       for (int i=0; i<n; i++)
             cout<<Arr[i]<<" ";
       delete []Arr;
}
 
void main() 
{
       gener();
       getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 01:03     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию
Посмотрите здесь:
C++ Превратить массив так, чтобы в его первой половине располагались элементы стоящие в четных позициях а во второй половине - нечетные
Отсортировать методом быстрой сортировки элементы массива, стоящие на четных позициях C++
Переделать массив таким образом, в первой половине располагались элементы, стоящие на четных позициях, а во второй половине - элементы в нечетных C++
Преобразовать массив таким образом, чтобы в его первой половине расположились элементы, стоящие в четных позициях C++
Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию C++
Отсортировать массив так, чтобы столбцы матрицы располагались по убыванию их поэлементных сумм C++
C++ Отсортировать по убыванию только элементы вектора, расположенные на чётных позициях
Заменить элементы массива,стоящие на нечетных позициях, на среднее арифметическое массива C++
Элементы массива, стоящие на нечётных позициях, переставить в начало массива, а на чётных - в конец C++
Переставить в начало массива элементы стоящие на нечетных позициях C++
Сортировка массива: отдельно элементы, стоящие на четных местах и элементы, стоящие на нечетных местах C++
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
samPogosyan
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 21
29.05.2014, 01:27     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
       while(f<=l)
       {
             while (mas[f]<mid) f++;
             while (mas[l]>mid) l--;
             if (f<=l)
             {
                    a=mas[f];
                    mas[f]=mas[l];
                    mas[l]=a;
                    f++; 
                    l--;
             }
       }
      
       if (begin<l) 
       quicksort(mas, begin, l);
       if (f<end)
       quicksort(mas, f, end);
должно сработать
lesha 13
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 20
29.05.2014, 18:32  [ТС]     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию #3
samPogosyan, а как задать, чтобы сортировало элементы, которые стоят на четных позициях?
samPogosyan
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 21
30.05.2014, 01:44     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию #4
lesha 13, сейчас у меня компилятор не работает, но могу предположить, что нужно вместо f++ и l-- поставить f+=2 и l-=2, попробуй так
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
12.05.2016, 01:33     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию #5
У вас получилось сделать это задание ? А то я немного не понимаю как сделать по убыванию...
Yandex
Объявления
12.05.2016, 01:33     Quicksort, отсортировать элементы массива, стоящие на четных позициях, чтобы они располагались по убыванию
Ответ Создать тему
Опции темы

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