Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2017, 21:32   #1
Shved2298
Пользователь
 
Регистрация: 08.05.2017
Сообщений: 19
По умолчанию Продемонстрируйте работу метода сортировки простыми вставками по возрастанию

Продемонстрируйте работу метода сортировки простыми вставками по возрастанию. Для этого выведите состояние заданного массива после каждой вставки в отдельных строках. Если массив упорядочен изначально, то нужно не выводить ничего.

Входные данные

В первой строке задано число N (1 ≤ N ≤ 100) - количество элементов в массиве. Во второй строке задано сам массив: последовательность натуральных чисел, каждое из которых не превышает 109.

Исходные данные

В выходной файл выведите строки (по количеству вставок) по N чисел в каждом.
Помогите пожалуйста, вот мой код, но он проходит всего 30% проверки, может кто знает как доделать. Заранее спасибо.
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector <int> a;
for (int i = 0; i < n; i++){
int b;
cin >> b;
a.push_back(b);
}
for (int i = 1; i < n; i++){
for (int j = i; j > 0; j--){
if (a[j - 1] > a[j]){
swap(a[j], a[j - 1]);
for (auto now : a){
cout << now << " ";
}
cout << "\n";
}
else{
break;
}
}
}
return 0;
}
Shved2298 вне форума Ответить с цитированием
Старый 02.12.2017, 07:58   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

https://www.youtube.com/watch?v=ROalU379l3U

Цитата:
Сообщение от Shved2298 Посмотреть сообщение
Код:
vector <int> a;
for (int i = 0; i < n; i++){
  int b;
  cin >> b;
  a.push_back(b);
}
Вот так никогда не делайте, это ОЧЕНЬ затратно.. Надо хотя бы так:
Код:
vector <int> a(n);
for (int i = 0; i < n; i++){
  cin >> a[i];
}

Последний раз редактировалось Black Fregat; 02.12.2017 в 08:03.
Black Fregat вне форума Ответить с цитированием
Старый 02.12.2017, 08:08   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Тут не совсем ясно, что именно понимать под одной вставкой.
Может оказаться, что авторы задачи не хотят видеть весь путь элемента к месту вставки, как сделано сейчас, а тольо результат - в конце цикла по j, если была хоть одна замена
Black Fregat вне форума Ответить с цитированием
Старый 02.12.2017, 12:05   #4
Shved2298
Пользователь
 
Регистрация: 08.05.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Вот так никогда не делайте, это ОЧЕНЬ затратно.. Надо хотя бы так:
Код:
vector <int> a(n);
for (int i = 0; i < n; i++){
  cin >> a[i];
}
К сожалению это мало что дало, как было 30% так и есть, просто быстродействия программы улучшилось.Но всеравно спасибо.

Последний раз редактировалось Alex11223; 02.12.2017 в 20:01.
Shved2298 вне форума Ответить с цитированием
Старый 02.12.2017, 14:37   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Я ведь и ещё написал
Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Может оказаться, что авторы задачи не хотят видеть весь путь элемента к месту вставки, как сделано сейчас, а только результат - в конце цикла по j, если была хоть одна замена
- это проверили?
Black Fregat вне форума Ответить с цитированием
Старый 02.12.2017, 16:23   #6
Shved2298
Пользователь
 
Регистрация: 08.05.2017
Сообщений: 19
По умолчанию

Я наверное не так что то делаю, вообще не запускаеться, или просто не пойму то что вы посоветували.
Shved2298 вне форума Ответить с цитированием
Старый 02.12.2017, 18:00   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Shved2298 Посмотреть сообщение
или просто не пойму то что вы посоветували
Код:
for (int i = 1; i < n; i++){
  for (int j = i; j > 0; j--){
    if (a[j - 1] > a[j]){
      swap(a[j], a[j - 1]);
    }
    else{
      if (j < i) {
        for (auto now : a){
          cout << now << " ";
        }
        cout << "\n";
      }
      break;
    }
  }
}
Black Fregat вне форума Ответить с цитированием
Старый 02.12.2017, 19:59   #8
Shved2298
Пользователь
 
Регистрация: 08.05.2017
Сообщений: 19
По умолчанию

Да, я так делал, так вообще только 10% засчитывает.Уже не знаю что делать.
Shved2298 вне форума Ответить с цитированием
Старый 02.12.2017, 21:29   #9
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Не могу понять. На мой взгляд, один из представленных вариантов должен быть правильным. Может, что-то с форматом выдачи? А к заданию прилагались примеры? И результат видно только в %, больше никакой информации?
Black Fregat вне форума Ответить с цитированием
Старый 02.12.2017, 21:38   #10
Shved2298
Пользователь
 
Регистрация: 08.05.2017
Сообщений: 19
По умолчанию

Это задача с e-olymp. Вот скрины, там где 30% мой вариант, где 10% тот что ві советовали.
Изображения
Тип файла: png 2.png (38.8 Кб, 142 просмотров)
Тип файла: png 1.png (47.2 Кб, 145 просмотров)
Тип файла: png 3.png (62.1 Кб, 154 просмотров)
Тип файла: png 4.png (37.6 Кб, 155 просмотров)
Тип файла: png Безымянный.png (45.7 Кб, 157 просмотров)
Shved2298 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка простыми вставками.Язык Си. Merkava Помощь студентам 3 31.05.2014 23:17
Сортировка простыми вставками Akcentbek Паскаль, Turbo Pascal, PascalABC.NET 1 30.04.2012 01:04
сортировка простыми вставками Valentinka25 Паскаль, Turbo Pascal, PascalABC.NET 1 03.04.2011 22:48
Сортировка массива простыми вставками на Delphi Алексей777911 Помощь студентам 3 21.04.2010 18:31