Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
1

В одномерном массиве произвести сортировку элементов по убыванию

28.06.2014, 15:08. Показов 1031. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одномерном массиве произвести сортировку элементов по убыванию, используя один из алгоритмов быстрой сортировки.

Необходимо сделать с входным файлом. Во входном файле:
В первой строке количество элементов, а во второй строке сами элементы.

Heeelp люди, я на экзамене. Не напишу экзамен, вылечу к чертям
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2014, 15:08
Ответы с готовыми решениями:

В одномерном массиве произвести сортировку элементов по убыванию
Помогите пожалуйста сыплюсь на экзамене! Только проще, пол года си занимаюсь.

В двумерном массиве произвести сортировку столбцов по убыванию элементов последней строки
Дан двумерный массив вещественных чисел размерностью . Произвести сортировку столбцов по убыванию...

Произвести сортировку в заданном одномерном массиве
Нужно было написать программу на Си, в которой стало бы возможным выполнение следующего условия:...

Произвести сортировку столбцов по убыванию элементов последней строки
Дан двумерный массив вещественных чисел размерностью . Произвести сортировку столбцов по убыванию...

17
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 9
28.06.2014, 15:24 2
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
#include <fstream>
#include <algorithm>
#include <vector>
 
bool sfunc(int a, int b)
{
    return a > b;
}
 
int main()
{
    std::ifstream in("input.txt");
    int number;
    in >> number;
    std::vector<int> data;
    int temp;
    while (!in.eof())
    {
        in >> temp;
        data.push_back(temp);
    }
    std::sort(data.begin(), data.end(), sfunc);
    in.close();
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.06.2014, 15:27 3
Гугл -> запрос "ввод массива из файла" -> профит.
Это ввод массива целых чисел из файла.
То же самое насчёт сортировки массивов.
0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 15:27  [ТС] 4
Он не сортирует массив, который записан в файле.
0
31 / 31 / 32
Регистрация: 21.06.2014
Сообщений: 81
28.06.2014, 15: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
#include <iostream>
#include <fstream>
using namespace std;
void qSort(int* arr,int left, int right)
{
    int x=arr[(left+right)/2];
    int i=left,j=right;
    while(i <= j)
    {
        while(arr[i]>x)
        {
            i++;
        }
        while(arr[j]<x)
        {
            j--;
        }
        if(i<=j)
        {
            swap(arr[i], arr[j]);
            i++;
            j--;
        }
    }
    if (i<right)
    {
        qSort(arr,i, right);
    }
    if (left<j)    
    {
        qSort(arr,left, j);    
    }
}
int main()
{
    ifstream fin("in.txt");
    int n;
    int arr[100];
    fin >> n;
    for(int i = 0; i < n; i++)
    {
        fin>>arr[i];
    }
    qSort(arr,0, n-1);
    for(int i = 0; i < n; i++)
    {
        cout<<arr[i]<<" ";
    }        
    return 0;
}
0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 15:35  [ТС] 6
Baton.

Можно прокомментировать строчки кода?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
28.06.2014, 15:51 7
Цитата Сообщение от wardenclyffe Посмотреть сообщение
bool sfunc(int a, int b)
std::greater
0
31 / 31 / 32
Регистрация: 21.06.2014
Сообщений: 81
28.06.2014, 16:02 8
Лучший ответ Сообщение было отмечено MaksRodin как решение

Решение

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
void qSort(int* arr,int left, int right)
{
    int x=arr[(left+right)/2]; //выбираем опорный элемент
    int i=left,j=right;  //с помощью этих индексов мы разделим массив на 3 части
    while(i <= j)
    {
        while(arr[i]>x) //в левой части должны быть элементы большие чем опорный, поэтому ищем элемент меньше чем опорный
        {
            i++;
        }
        while(arr[j]<x)//в правой части должны быть элементы меньшие чем опорный, поэтмоу ищем элемент больше чем опорный
        {
            j--;
        }
        if(i<=j)//если элемент не в своей части
        {
            swap(arr[i], arr[j]);
            i++;
            j--;
        }
    }
    if (i<right) //сортируем правую часть, если она нуждается в сортировке
    {
        qSort(arr,i, right);
    }
    if (left<j)   //сортируем левую часть
    {
        qSort(arr,left, j);    
    }
}
1
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 16:07  [ТС] 9
int i=left,j=right; //с помощью этих индексов мы разделим массив на 3 части

На 3 части? Не 4 разве?

swap(arr[i], arr[j]); - если элемент не в своей части, то меняем части массива местами?
i++;
j--;

И увеличиваем i и уменьшаем j на единицу?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.06.2014, 16:11 10
Кстати, если количество чисел в файле не совпадает с количеством элементов в массиве, то мусор выдаёт.
0
31 / 31 / 32
Регистрация: 21.06.2014
Сообщений: 81
28.06.2014, 16:16 11
Цитата Сообщение от MaksRodin Посмотреть сообщение
nt i=left,j=right; //с помощью этих индексов мы разделим массив на 3 части
На 3 части? Не 4 разве?
swap(arr[i], arr[j]); - если элемент не в своей части, то меняем части массива местами?
i++;
j--;
И увеличиваем i и уменьшаем j на единицу?
Части 3, местами меняем элементы.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.06.2014, 17:06 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
#include <iostream>
#include <fstream>  // для работы с файлами
using namespace std;
 
int main()
{
    ifstream InFile("in.txt");  // создаём переменную с файлом
    const int size = 10;    // размер массива должен совпадать с количеством чисел в файле
    int arr[size]; // создаём массив
    if(InFile) // если файл найден, то выполняется следующий цикл:
    {   
        for(int i = 0; i != size; i++)
        {
            InFile >> arr[i];   // запись из файла в массив
        }
    }
    else
        cout << "file not found!!!";    // если файл не найден,
                                        // выводится предупреждение
 
// Сортируем массив методом пузырьковой сортировки:
    for(int a = 1; a < size; a++)
        for(int b = size - 1; b >= a; b--)
            {
                if(arr[b-1] < arr[b]) // сортируем по убыванию
                    {   
                        //Если значения элементов массива расположены не
                        //по порядку, то меняем их местами:
                        int t = arr[b-1];
                        arr[b-1] = arr[b];
                        arr[b] = t;
                    }
            }
    for(int i = 0; i != size; i++) // выводим все элементы на экран
        cout << arr[i] << " ";
 
    cout << endl;
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 17:44  [ТС] 13
Спасибо ребята, сдал экзамен на 4!
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.06.2014, 17:46 14
Цитата Сообщение от MaksRodin Посмотреть сообщение
Спасибо ребята, сдал экзамен на 4!
Да на здоровье! Только толку от этих экзаменов и этой учёбы, если знаний как таковых нету?
1
Croessmah
28.06.2014, 17:49
  #15

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
если знаний как таковых нету?
зато диплом есть :)

0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 17:51  [ТС] 16
Сессию сдаю, до диплома еще достаточно далеко
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.06.2014, 17:52 17
Цитата Сообщение от Croessmah Посмотреть сообщение
зато диплом есть
А зачем диплом без знаний?

Цитата Сообщение от MaksRodin Посмотреть сообщение
Сессию сдаю, до диплома еще достаточно далеко
MaksRodin, чё-то стало интересно. А ты в итоге чей код преподу отдал?
1
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 23
28.06.2014, 17:53  [ТС] 18
Код батона отдал и объяснил на изи.

Тебе спасибо, за то что откликнулся =) Лови репу
0
28.06.2014, 17:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2014, 17:53
Помогаю со студенческими работами здесь

Произвести сортировку столбцов заданной вещественной матрицы по убыванию элементов последней строки
Дан двумерный массив вещественных чисел размерностью . Произвести сортировку столбцов по...

В целочисленном массиве произвести сортировку только четных элементов
Дан цель численный массив. Требуется расположить четные элементы в порядке возрастания. При этом...

Как произвести сортировку интов по убыванию без использования массива?
Как произвести сортировку интов по убыванию без использования массива. public class Chislo { ...

Произвести сортировку методом прямого выбора первого полученного массива по убыванию
Заполнить массив из 20 элементов случайными числами от -10 до 5. Сформировать два массива,...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru