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

Сортировка бинарными вставками - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа стандартного входного потока http://www.cyberforum.ru/cpp-beginners/thread549066.html
Здравствуйте. Допустим есть код: int number1, number2; std::cin >> number1 >> number2; Мы вводим, например, 1 2 и переменным number1 и number2 присваиваются значения "1" и "2" соответственно. А если мы введём
C++ Из данных двух массивов образовать третий массив Из данных двух массивов образуется третий массив: сначала элементы первого массива, в конце элементы второго массива; помогите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread549062.html
C++ вводом строк из файла
Привет, уважаемые программисты! У меня проблема возникла вот в чем: в файле есть несколько строк текста. мне необходимо, чтобы после ввода определенного количества символов и их обработки программа продолжала считывать данные не после места остановки, а уже со следующей строки. Я пробовал сделать так: ifstream input("/media/wind/forlabs/2_sem/l4/input.txt"); ... while(1) { if(i...
C++ Удалить введённую подстроку из строки, без string.h
Задача состоит в том, чтобы удалить подстроку из строки, обе из которых вводятся с клавиатуры. Не разрешается использовать <string.h>. В C++, откровенно говоря, не понимаю ровным счётом ничего, надеюсь на вашу помощь. Заранее спасибо :).
C++ Потоки на С++. Помогите. http://www.cyberforum.ru/cpp-beginners/thread549033.html
Здравствуйте. Допустим есть файл matrix. В нем целочисленная матрица неопределенного размера и с разным количеством пробелов между элементами. Так вот вопрос: как сделать так, чтобы поток считывал по одной строке? Допустим если сделать так: for(i=0;i<20;i++) marrix >> arr; то массив arr без разбора заполниться первыми встретившимися 20 элементами, но как сделать чтобы поток считывал строки в...
C++ Как сохранить картинку из ресурсов на жёсткий диск? Есть в ресурсах картинка IDB_BITMAP1. Как её извлечь на жёсткий диск? подробнее

Показать сообщение отдельно
lirik__
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 1
21.03.2016, 02:14     Сортировка бинарными вставками
Бинарные вставки через рекурсию.
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
void out(int arr[], int size);
void in_rand(int arr[], int size);
 
int bin_insert(int arr[], int left, int right, int i, int& num_of_cmp)
{
    if (left > right)
        return left;    
 
    int mid = (left + right) / 2;
 
    if (arr[i] > arr[mid]){
        num_of_cmp++;
        bin_insert(arr, mid + 1, right, i, num_of_cmp);
    }
 
    else{
        num_of_cmp++;
        bin_insert(arr, left, mid - 1, i, num_of_cmp);
    }
}
 
void shift_right(int arr[], int i, int index, int& num_of_swap)
{
    int var_to_swap = arr[i];
    for (int k = i; k > index; k--){
        arr[k] = arr[k - 1];
        num_of_swap++;
    }
    arr[index] = var_to_swap;
    num_of_swap++;
}
 
int main()
{
    const int size = 10000;   // SIZE
    int arr[size];
    int num_of_cmp = 0, num_of_swap = 0;
    int index = 0;
 
    in_rand(arr, size);
    
    int time = clock();
    for (int i = 1; i < size; i++){
        if (arr[i] < arr[i - 1]){
            shift_right(arr, i, bin_insert(arr, 0, i - 1, i, num_of_cmp), num_of_swap);
        }
    }
    time = clock() - time;
    cout << endl << "Array with " << size << " elements was sorted for " << time << "ms" << endl << num_of_cmp << " compare and " << num_of_swap << " swap.\n\nPress the Enter to show sorted array." << endl;
 
 
    cout << endl << endl;
    _getch();
    out(arr, size);
 
    _getch();
    return 0;
}
 
void in_rand(int arr[], int size)
{
    srand(time(0));
 
    for (int i = 0; i < size; i++)
        arr[i] = rand() % 100;
}
 
void out(int arr[], int size)
{
    for (int i = 0; i < size; i++)
        cout << arr[i] << "  ";
}
 
Текущее время: 20:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru