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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? http://www.cyberforum.ru/cpp-beginners/thread362980.html
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и выполним такой код: #include <fstream> using namespace std; int main () { //ОТкроем первый файл на чтение
C++ Чтение двух файлов одновременно! Здравствуйте! Подскажите, пожалуйста, как открыть одновременно два файла для чтения. Из первого файла записать данные в массив А, из второго в массив В. Заранее благодарен за помощь! Моя попытка: #include <iostream> #include <conio.h> #include <fstream> http://www.cyberforum.ru/cpp-beginners/thread362969.html
C++ Помогите с CharToOem и ещё с if and else
Всем доброго дня. У меня вот такая вот проблема не могу разобраться по чему не работает русский язык, пишет что CharToOem невозможно преобразить параметр 1 из const*char и не могу понять почему пишет что else без парной if хотя вроде всё есть. Первая работа #include <iostream> #include <windows.h> char* Rus (const char* text); using namespace std; int main()
программу для вычисления значения функции C++
Составить программу для вычисления значения функции z=x1+x2+x3 , где х1,х2,х3(на рисунке) ai, bi, ci – элементы массивов Вычисление xi выполняется в процедуре, а для вычисления факториала использовать функцию.
C++ Написание генератора простых чисел http://www.cyberforum.ru/cpp-beginners/thread362957.html
Составить программу-генератор простых чисел , в основу положить формулу 2х2+29 при 0≤ х ≤28
C++ Заданы радиус круга ... Заданы радиус круга, сторона квадрата , две смежные стороны прямоугольника и три стороны прямоугольника. Определить, какая фигура имеет большую площадь. подробнее

Показать сообщение отдельно
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
08.10.2011, 11:46     Сортировка массивов
Приветствую всех. Делаю задание из учебника Дейтелов.
Задания:
7.11. (Пузырьковая сортировка) В алгоритме пузырьковой сортировки меньшие
значения постепенно «всплывают» к началу массива подобно пузырькам в воде, в то
время как большие значения опускаются «на дно». Пузырьковая сортировка
выполняет несколько проходов по массиву. На каждом проходе сравниваются пары
смежных элементов. Если порядок элементов в паре восходящий (или элементы
идентичны), мы оставляем их так, как есть. Если порядок элементов
нисходящий, их значения в массиве обмениваются. Напишите программу,
сортирующую массив из 10 целых чисел посредством пузырьковой сортировки.
7.12. Пузырьковая сортировка, представленная в упражнении 7.11, неэффективна
для больших массивов. Выполните следующие простые модификации для
улучшения эффективности пузырьковой сортировки.
a) После первого прохода наибольшее число гарантированно окажется в
элементе массива с наивысшим номером; после второго прохода «на месте» окажутся
два наибольших числа и так далее. Модифицируйте пузырьковую сортировку
так, чтобы вместо выполнения девяти сравнений на каждом проходе на
втором проходе было восемь сравнений, на третьем проходе — семь и так далее.
b) Данные в массиве могут уже находиться в необходимом порядке, либо
близком к нему, так зачем же делать девять проходов, если достаточно сделать
меньше? Модифицируйте сортировку так, чтобы в конце каждого прохода
проверялось, были ли сделаны какие-либо перестановки. Если не было ни
одной, значит, данные уже находятся в соответствующем порядке, так что
программа должна завершиться. Если перестановки были сделаны, нужно
сделать, по меньшей мере, еще один проход.


Первое сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template< typename T >
void swap( T &x, T &y )
{
    T temp = x;
    x = y;
    y = temp;
}
 
template< typename T >
void arrSort( T arr[], const long long &size )
{
    for ( int i = 0; i < size; i++ )
        for ( int j = 1; j < size; j++ )
            if ( arr[ j ] < arr[ j - 1 ] )
                swap ( arr[ j ], arr[ j - 1 ] );
}
Из второго задания часть а.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template< typename T >
void arrSort( T arr[], const long long &size )
{
    int max;
    int temp = size - 1;
 
    for ( int i = 0; i < size; i++, temp-- )
    {
        max = 0;
 
        for ( int j = 0; j <= temp; j++ )
            if ( arr[ j ] > arr[ max ] )
                max = j;
 
        swap ( arr[ max ], arr[ temp ] );
    }
}
Не могу понять, как сделать часть b. Подскажите, пожалуйста. И поправьте если я что не так сделал в предыдущих. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru