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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Neigi
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6
26.02.2013, 10:24     Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок)) #1
Задание 1.

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

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

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

улучшенные сортировки C++
сортировка (метод прямого выбора) C++
C++ помогите пожалуйста задать прямые с помощью структур прямые задаются точкой и направляющим вектором. дальше как делать знаю
C++ Сортировка методом простых вставок
C++ Сортировка выбором (метод прямого выбора). Ошибка в задаче
C++ Сортировка прямого включения
C++ Сортировка списка методом простых вставок
Сортировка методом прямого включения C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 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

Некоторые пояснения:
  • файл используется для того, чтобы можно было анализировать выполнение алгоритма при статических значениях;
  • работу с файлом и загрузкой данных в вектор можно было сделать намного эффективней, но в рамках задачи это не столь важно.
Yandex
Объявления
26.02.2013, 19:02     Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок))
Ответ Создать тему
Опции темы

Текущее время: 12:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru