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

Отсортировать массив по убыванию и найти в нем элемент, равный X - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти произведение элементов массива, превышающих последний элемент http://www.cyberforum.ru/cpp-beginners/thread1494407.html
Произведение элементов массива, превышающих последний элемент. void __fastcall TForm1::Button1Click(TObject *Sender) { StringGrid1->ColCount=StrToInt(Edit1->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
C++ Ошибки в коде с вложеными классами: Невозможно обратиться к private члену Здорова! Есть код: #include <iostream> using std::cout; #include <afxwin.h> #define IDD_One 1 #define IDD_Two 2 #define IDD_IUnknown_my 3 http://www.cyberforum.ru/cpp-beginners/thread1494405.html
C++ Отсортировать массив по убыванию и найти в нем элемент, равный X
Помогите пожалуйста написать программу, которая сортирует массив ПО УБЫВАНИЮ и ищет в нем элемент, равный X (это число вводится с клавиатуры). Использовать двоичный поиск.
C++ Конветирование строки char в time_t или в struct tm
Есть строковые переменные типа char над которыми нужно производить вычисления (сравнение, получение разницы). Порыл сеть на предмет как это делать, - в принципе понятно, но все преобразования производятся на переменными типа time_t или struct tm, а у меня типа char вида "YYYY-MM-DD". Как преобразовать то, что есть у меня к типу time_t или к структуре tm???
C++ Выделить в другой массив все числа, которые встречаются более одного раза в исходном http://www.cyberforum.ru/cpp-beginners/thread1494379.html
Всем привет.Помогите пожалуйста,очень надо,выручите,буду очень благодарен. Заполнить массив случайными числами и выделить в другой массив все числа, которые встречаются более одного раза. Пример: Исходный массив: 4 1 2 1 11 2 34 Результат: 1 2
C++ Перегрузка оператора запись в поток Здравствуйте! Подскажите, пожалуйста, возможно ли так реализовать: #include <fstream> class ClassA { public: bool Initialize(); void Shutdown(); void Write(char*); подробнее

Показать сообщение отдельно
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
07.07.2015, 13:15     Отсортировать массив по убыванию и найти в нем элемент, равный X
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
102
103
104
105
106
107
108
109
#include <iostream>
#include <cstdlib>
void b_heapify(int* arr, size_t N, size_t i, 
               bool (*pcmp)(int, int));
void psort(int* arr, size_t N, bool (*pcmp)(int, int));
bool bfind(const int* f, const int* l, int x, 
           bool (*pcmp)(int, int));
 
bool compare(int a, int b){ return (a > b); }
 
 
 
int main(void){
    const size_t N = 20;
    int A[N];
 
    for(size_t i = 0; i < N; ++i){
        A[i] = std::rand() % 10;
        std::cout << A[i] << ' ';
    }
    std::cout << std::endl;
 
    //сортируем
    psort(A, N, compare);
 
    //вывести отсортированный массив
    for(size_t j = 0; j < N; ++j){
        // для теста
        if(bfind(A, A + N, A[j], compare))
            std::cout << A[j] << ' ';
    }
    std::cout << std::endl;
 
    // найти число X
    int X = 7;
/*  
    std::cout << "Enter X: ";
    std::cin  >> X;
    std::cin.sync();
*/
    if(bfind(A, A + N, X, compare))
        std::cout << "Yes find." << std::endl;
    else
        std::cerr << "not found X!" << std::endl;
    return 0;
}
 
 
/* двоичный поиск ищет значение в упорядоченном 
   массиве, значение x */
bool bfind(const int* f, const int* l, int x, 
           bool (*pcmp)(int, int)){
    size_t i, j, m;
    if((*pcmp)(x, *f) || (*pcmp)(*(l - 1), x))
        return false;
 
    i = 0;
    j = (size_t)(l - f);
    while(i < j){
        m = (i + j) >> 1;
        if((*pcmp)(x, f[m]))
            j = m;
        else {
            if(x == f[m])
                return true;
            i = m + 1;
        }
    }
    return false;
}
 
//---------------------------------------------
 
//восстановление свойства бинарной кучи
void b_heapify(int* arr, size_t N, size_t i, 
               bool (*pcmp)(int, int)) {
    size_t li, ri, big;
 
    while(1){
        li = (i << 1) + 1;
        ri = (i << 1) + 2;
        if((li < N) && (*pcmp)(arr[i], arr[li]))
            big = li;
        else
            big = i;
 
        if((ri < N) && (*pcmp)(arr[big], arr[ri]))
            big = ri;
 
        if(big != i){
            std::swap(arr[big], arr[i]);
            i = big;
        } else
            break;
    }
}
 
// пирамидальная сортировка
void psort(int* arr, size_t N, bool (*pcmp)(int, int)){
    //собрать кучу
    for(size_t i = N >> 1; i > 0; --i) 
        b_heapify(arr, N, i, pcmp);
    b_heapify(arr, N, 0, pcmp);
 
    for(size_t j = 0; j < N; ++j){
        std::swap(arr[0], arr[N - 1 - j]);
        b_heapify(arr, N - 1 - j, 0, pcmp);
    }
}
Результат работы кода
 
Текущее время: 02:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru