2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Сортировка
Сообщение23.12.2015, 12:14 
Аватара пользователя


20/06/14
236
Здраствуйте, не могу найти в коде ошибку, прошу вашей помощи.

Описание
    Считывание вектора
    Показ исходного вектора
    Сортировка координат вектора по неубыванию (найти индекс $i_\mathrm{min}$ минимального элемента вектора, который не меньше переменной-итератора $i_\mathrm{min} \geqslant i$, поменять местами $i_\mathrm{min}$-ый и $i$-ый элементы вектора)
    Показ отсортированного вектора

Output
Наибольший элемент моя программа ставит в самое начало:
  1. 1-th: 7 
  2. 2-th: 4 
  3. 3-th: 8 
  4. 4-th: 2 
  5. 5-th: 9 
  6. 6-th: 4 
  7. 7-th: 0 
  8. End. 
  9. Original: 7 4 8 2 9 4  
  10. Sorted: 9 2 4 4 7 8  
  11. Program ended with exit code: 0 


Код программы
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <iostream>
#include <vector>

using namespace std;

int main (){
        vector <int> vec;
        // vector entering
        int i = 1; int temp; while (i >= 1){
                cout << i << "-th: "; i++;
                cin >> temp;
                if (temp != 0){
                        vec.push_back(temp);
                } else { break; }
               
       
        }
        cout << "End." << endl << "Original: ";
        //original show
        for (int i : vec){
                cout << i << " ";
        }
        cout << endl << "Sorted: ";
        //sorting
        for (i = 0; i < vec.size(); i++){
                int imin = 0;
                for (int j = i; j < vec.size(); j++){
                        if (vec[j] < vec[imin]){ imin = j; }
                               
                }
               
                int temp = vec[i];
                vec[i] = vec[imin];
                vec[imin] = temp;
        }
        //sorted show
        for (int i : vec){
                cout << i << " ";
        }
        cout << endl;
        return 0;
}

 Профиль  
                  
 
 Re: Сортировка
Сообщение23.12.2015, 12:53 
Заслуженный участник


09/05/12
25179
Когда программа добирается до последнего элемента (который при этом, естественно, оказывается самым большим), происходит следующее:
Используется синтаксис C++
        for (i = 0; i < vec.size(); i++){
                int imin = 0;
                for (int j = i; j < vec.size(); j++){
                        if (vec[j] < vec[imin]){ imin = j; }

                }

                int temp = vec[i];
                vec[i] = vec[imin];
                vec[imin] = temp;
        }
Внутри внешнего цикла imin обнуляется, во внутреннем цикле ничего не происходит, в результате последний элемент в конце внешнего цикла переставляется с нулевым.

 Профиль  
                  
 
 Re: Сортировка
Сообщение23.12.2015, 16:57 
Аватара пользователя


20/06/14
236
Спасибо за помощь, Pphantom

Микровопрос
Возможны ли такие конструкции, каков будет синтаксис?:
Используется синтаксис C++
cin >> int i;
// что эквивалентно
int i;
cin >> i;

 Профиль  
                  
 
 Re: Сортировка
Сообщение23.12.2015, 18:09 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Микроответ :-)
Используется синтаксис C++
cin >> int i;// не соответствует стандарту
//правильно будет
int i;
. . . . .
cin >> i;

 Профиль  
                  
 
 Re: Сортировка
Сообщение23.12.2015, 20:04 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(Микробрюзжание)

Qazed в сообщении #1084967 писал(а):
  1. 1-th: 7  
  2. 2-th: 4  
  3. 3-th: 8  
  4. 4-th: 2  
  5. 5-th: 9  
  6. 6-th: 4  
  7. 7-th: 0  

  1. 1st: 7  
  2. 2nd: 4  
  3. 3rd: 8  
  4. 4th: 2  
  5. 5th: 9  
  6. 6th: 4  
  7. 7th: 0  

 Профиль  
                  
 
 Re: Сортировка
Сообщение23.12.2015, 20:24 
Аватара пользователя


20/06/14
236
Спасибо, whitefox

(Оффтоп)

Aritaborian, совершенно справедливое

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group