2014-11-18 4 views
1

Я создаю вектор и заполняю его случайными целыми числами. Затем я распечатываю все несортированные значения и вызываю insertionSort(). После этого вызова номера должны быть напечатаны в отсортированном порядке. Моя программа продолжает рушиться, и я не знаю, почему.C++ Вставка Сортировка сбоев

Вот мой код:

#include <cstdlib> 
#include <iostream> 
#include <vector> 
#include <time.h> 

using namespace std; 

int listSize; 

vector<int> intList() 
{ 
    cout << "How many numbers do you want to sort?\n"; 
    cin >> listSize; 
    vector<int> list; 
    for (int i = 0; i < listSize; i++) 
    { 
     int random = rand() % 10001; 
     list.push_back(random); 
    } 

    return list; 
}; 

void insertionSort(vector<int>& data) 
{ 
    int i, j, tmp; 

    for (i = 1; data.size(); i++) 
    { 
     j = i; 
     tmp = data[i]; 
     while (j > 0 && tmp < data[j-1]) 
     { 
      data[j] = data[j-1]; 
      j--; 
     } 
     data[j] = tmp; 
    } 
} 

int main(int argc, char** argv) 
{ 
    srand(time(0)); 
    vector<int> list = intList(); 
    for (vector<int>::iterator it = list.begin(); it != list.end(); it++) 
    { 
     cout << *it << " "; 
    } 
    cout << "\n"; 

    insertionSort(list); 

    for (vector<int>::iterator it = list.begin(); it != list.end(); it++) 
    { 
     cout << *it << " "; 
    } 

} 
+0

Думаю, что-то вроде этого (http://pastebin.com/qaCPV0Rj) было бы проще. – WhozCraig

ответ

5

Это

for (i = 1; data.size(); i++) 

должно быть:

for (i = 1; i<data.size(); ++i) 

В противном случае for никогда не ломается.

3

Ваш цикл for не проверяет состояние прерывания, и петли навсегда начинают писать за пределы.

for (i = 1; data.size(); i++) 

Вы должны проверить, меньше ли i, чем размер вектора.

for (i = 1; i < data.size(); i++) 
Смежные вопросы