Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 16.05.2019
Сообщений: 12
1

Сортировка одномерного массива вещественных чисел по убыванию методом быстрой сортировки

10.12.2019, 21:50. Просмотров 1336. Ответов 3
Метки нет (Все метки)

Написать программу для сортировки одномерного массива вещественных чисел по убыванию методом быстрой сортировки. Размерность массива, а также границы диапазона изменения элементов N и M вводятся пользователем с клавиатуры, а сам массив заполняется случайными числами из указанного пользователем диапазона. Сортировку массива и генерацию массива оформить в виде отдельных функций.

Написал программу, но на сортировку подается на один элемент меньше, не могу понять почему. В чём может быть проблема?
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
#include <iostream>
#include <ctime>
using namespace std;
int first, last;
void quicksort(double *A, int first, int last)
{
    double mid, count;
    int f = first, l = last;
    mid = A[(f + l) / 2]; 
    do
    {
        while (A[f] > mid) f++;
        while (A[l] < mid) l--;
        if (f <= l)
        {
            count = A[f];
            A[f] = A[l];
            A[l] = count;
            f++;
            l--;
        }
    } 
    while (f < l);
    if (first < l) quicksort(A, first, l);
    if (f < last) quicksort(A, f, last);
}
 
double random(double *A, int n,int N, int M) 
{
    srand(time(NULL));
    cout << "Исходный массив: ";
    for (int i = 0; i < n; i++)
    {
        A[i] = (double)(rand() % (M - N + 1) + N) / 10;
        cout<< A[i] << "  ";
    }
    return *A;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    double *A = new double[n];
    n--;
    int N, M;
    cout << "Введите границы диапазона: ";
    cin >> N >> M;
    N = N * 10;
    M = M * 10;
    cout <<random(A,n,N,M);
    first = 0; last = n-1;
    quicksort(A, first, last);
    cout << endl << "Результирующий массив: ";
    for (int i = 0; i < n; i++) cout << A[i] << "  ";
    cout << endl;
    delete[]A;
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2019, 21:50
Ответы с готовыми решениями:

Сортировка одномерного массива целых чисел по возрастанию методом быстрой сортировки
Написать программу для сортировки одномерного массива целых чисел по возрастанию методом быстрой...

Составить программу сортировки одномерного числового массива от начала массива к элементу с заданным номером по убыванию (методом выбора)
Помогите составить программу на С++. Заданный номер - 28.

Функция сортировки по возрастанию одномерного массива вещественных чисел
Напишите функцию сортировки по возрастанию одномерного массива вещественных чисел. Напишите также...

Заполнить массив случайными числами и отсортировать его методом быстрой сортировки по убыванию
Написать программу на с++ которая заполняет массив случайными числами и сортирует их методом...

3
4221 / 2888 / 1781
Регистрация: 18.12.2017
Сообщений: 9,029
10.12.2019, 22:54 2
Лучший ответ Сообщение было отмечено Neis1 как решение

Решение

вот код сортировки по возрастанию, посмотрите, может что пригодится
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void Random (double *A, int n, int N, int M) 
{    
    for (int i = 0; i < n; i++)    
        A[i]=0.1*(rand()%(M-N+1)+N);
}
 
void QuickSort(double *A, int k)
{ 
    long i = 0, j = k;      
    double temp, p;
 
    p = A[ k>>1 ];
    
    do {
        while ( A[i] < p ) i++;
        while ( A[j] > p ) j--;
 
        if (i <= j) {
            temp = A[i]; A[i] = A[j]; A[j] = temp;
            i++; j--;
        }
    } while ( i<=j ); 
    
    if ( j > 0 ) QuickSort(A, j);
    if ( k > i ) QuickSort(A+i, k-i);
}
 
void Print (double *A, int n)
{
    for (int i = 0; i < n; i++)             
        cout << A[i] << "  ";        
    cout << "\n";    
} 
 
int main()
{
    srand((int)time(0));
    int n, N, M;    
    cout << "n="; cin >> n;
    
    double *A = new double[n];    
    
    cout << "Enter limits:\n";
    cout << "N="; cin >> N;
    cout << "M="; cin >> M;
    N*=10; M*=10;
    
    Random(A,n,N,M);
    cout << "Matrix:\n";
    Print(A,n); 
    QuickSort(A,n-1);
    cout << "Sorted matrix:\n";
    Print(A,n);
    
    delete[]A;
system("pause");
return 0;
}
1
1 / 1 / 0
Регистрация: 16.05.2019
Сообщений: 12
10.12.2019, 22:59  [ТС] 3
Спасибо
0
4221 / 2888 / 1781
Регистрация: 18.12.2017
Сообщений: 9,029
10.12.2019, 23:01 4
Neis1, знаки в строках 20-21 поменяйте, будет по убыванию:
while ( A[i] > p ) i++;
while ( A[j] < p ) j--;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2019, 23:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сортировка последовательности методом быстрой сортировки
помогите :Написати програму для сортування послідовності 45 37 2 5 9 12 6 4 52 методом швидкого...

Сортировка координат (методом быстрой сортировки)
Как отсортировать координаты сначала по x, а при равных x по y, методом быстрой сортировки? Если...

Пример быстрой сортировки массива строк и сортировки методом выбора
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк...

Сортировка массива методом "Гномьей сортировки" по убыванию значений
Дан массив вещественных чисел. Напишите программу для сортировки массива &quot;методом Гномьей...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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