2014 dxdy logo

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

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




 
 Сортировка
Сообщение23.12.2015, 12:14 
Аватара пользователя
Здраствуйте, не могу найти в коде ошибку, прошу вашей помощи.

Описание
    Считывание вектора
    Показ исходного вектора
    Сортировка координат вектора по неубыванию (найти индекс $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 
Когда программа добирается до последнего элемента (который при этом, естественно, оказывается самым большим), происходит следующее:
Используется синтаксис 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 
Аватара пользователя
Спасибо за помощь, Pphantom

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

 
 
 
 Re: Сортировка
Сообщение23.12.2015, 18:09 
Аватара пользователя
Микроответ :-)
Используется синтаксис C++
cin >> int i;// не соответствует стандарту
//правильно будет
int i;
. . . . .
cin >> i;

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

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

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 
Аватара пользователя
Спасибо, whitefox

(Оффтоп)

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

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group