Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Neigi
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6
#1

Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок)) - C++

26.02.2013, 10:24. Просмотров 2768. Ответов 1
Метки нет (Все метки)

Задание 1.

Сортировка с помощью прямого включения (метод простых вставок).

Методические указания к выполнению задания 1
Описать алгоритм сортировки. Проанализировать его эффективность. Написать программу сортировки данных с использованием указанного алгоритма.

Зарание большое спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 10:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок)) (C++):

Сравнение быстрого и прямого включения методов сортировки - C++
Есть массив, размер которого задает пользователь. Затем этот массив копируется на две одинаковые копии и каждая копия (не зависимо от...

Написать программу сортировки методом простых вставок - C++
Написать программу сортировки методом простых вставок элементов массива, имеющих четные индексы.

Сортировка прямого включения - C++
Не переставляется первый элемент массива, как исправить? void Insertion(int *mas, int *n) { for (int i = 0; i < n+1; ++i) { ...

Сортировка методом прямого включения - C++
Даны n целых положительных двузначных чисел. Трактуя каждое число как пару цифр из интервала 0–9, отсортировать их (цифры) по возрастанию. ...

Сортировка методом простых вставок - C++
Сортировка методом простых вставок - алгоритм S с. Вычисление трудоемкости Замер времени для отсортированного массива, отсортированного в...

Сортировка списка методом простых вставок - C++
Помогите сделать чтобы в программе были двусвязные списки и чтобы списки из файла выводились в нормальном порядке (как в файлах), а не с...

1
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
26.02.2013, 19:02 #2
Цитата Сообщение от Neigi Посмотреть сообщение
Проанализировать его эффективность.
Мне вот интересно как можно проанализировать его эффективность если не сравнивать с другими алгоритмами? Ведь всё познаётся в сравнении.

Программа генерирующая текстовый файл со случайными числами:
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
 
int main(int argc, const char* argv[])
{
   srand(time(NULL));
 
   if (argc != 3)
   {
      std::cerr << "Usage: program <file.txt> <count>" << std::endl;
      system("PAUSE");
      return EXIT_FAILURE;
   }
 
   int count = atoi(argv[2]);
 
   std::ofstream f(argv[1]);
 
   if (!f.is_open())
   {
      std::cerr << "Error: file " << argv[1] << " not opened ..." << std::endl;
      return EXIT_FAILURE;
   }
 
   for (; count; --count)
   {
      int value = (rand() << 16) + rand();
      f << value << std::endl;
   }
 
   f.close();
 
   return EXIT_SUCCESS;
}
Использование:
Код
$ program.exe <file.txt> <count>
где, <file.txt> - файл в который заносятся числа, а <count> - количество чисел.

Сама программа:
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
 
bool LoadData(const std::string& fname, std::vector<int>& array, int count)
{
   std::ifstream f(fname.c_str());
 
   if (!f.is_open())
   {
      return false;
   }
 
   if (count == -1)
   {
      count = 0x7FFFFFFF;
   }
 
   int value;
   array.clear();
   for (; count && !f.eof(); --count)
   {
      f >> value;
      array.push_back(value);
   }
 
   f.close();
 
   return true;
}
 
void Swap(int& a, int& b)
{
   int tmp = a;
   a = b;
   b = tmp;
}
 
void Sort(std::vector<int>& array)
{
   for (unsigned i = 1; i < array.size(); ++i)
   {
      for (unsigned j = i; (j > 0) && (array[j] < array[j-1]); --j)
      {
         Swap(array[j], array[j-1]);
      }
   }
}
 
int main(int argc, const char* argv[])
{
   if (argc != 2)
   {
      std::cerr << "Usage: program <file.txt>" << std::endl;
      system("PAUSE");
      return EXIT_FAILURE;
   }
 
   std::vector<int> array;
   int count = -1;
 
   std::cout << "   count  |  clock    " << std::endl;
   std::cout << "----------+-----------" << std::endl;
 
   while (LoadData(argv[1], array, count) && count)
   {
      clock_t start = clock();
      Sort(array);
 
      std::cout << std::setw(10) << array.size() << "|"
                << std::setw(10) << clock() - start
                << std::endl;
 
      count = array.size() / 2;
   }
 
   return EXIT_SUCCESS;
}
Использование:
Код
$ program.exe <file.txt>
где, <file.txt> - файл с числами.

Результат выполнения представлен в виде таблицы:
Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок))

Первая колонка - количество элементов, вторая колонка - время в миллисекундах.

Исходники + бинарники: program.7z

Некоторые пояснения:
  • файл используется для того, чтобы можно было анализировать выполнение алгоритма при статических значениях;
  • работу с файлом и загрузкой данных в вектор можно было сделать намного эффективней, но в рамках задачи это не столь важно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 19:02
Привет! Вот еще темы с ответами:

улучшенные сортировки - C++
в первой строке входного файла input.txt записано число N (количество чисел, N&lt;=1000), затем идут N целых чисел. в файл output.txt ...

Сортировка четных элементов масссива с помощью прямого выбора - C++
сортировка с помощью прямого выбора Четные элементы в одномерном массиве

сортировка (метод прямого выбора) - C++
Народ, подскажите почему неправильно считает количество перестановок М? Уже час голову ломаю(#include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Сортировка выбором (метод прямого выбора). Ошибка в задаче - C++
Привет. У меня есть программка решение на задачку &quot;Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в...


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

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

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