2015-04-30 2 views
0

У меня есть простая программа сортировки, скомпилированная Dev-C++ 4.9.8.0. Я запустил программу (да, это компилирует), и она просто останавливает после того, как отображает линию, в которой вектор отображается в первый раз. Примечание - он не замерзает, кажется, что он просто делает паузу. В коде сортировка выбора происходит следующим образом, поэтому я предполагаю, что там происходит ошибка, но для меня нет сообщения об ошибке, чтобы даже выяснить, что делать!Почему моя программа приостанавливается после выбора функции сортировки?

#include <iostream> 
#include <stdlib.h> 
#include <vector> 
#include <cmath> 
#include <ctime> 

using namespace std; 

void bubbleSort (vector<int>& data) 
{ 
if(data.size() <= 1) 
    return; 

int flag=1; 
int temp; 

    for(int i=1; (i<=data.size()) && flag; i++) 
    { 
     flag=0; 
     for(int j=0; (j<data.size()-1); j++) 
     { 
      if(data[j+1] > data[j]) 
      { 
       temp = data[j]; 
       data[j] = data[j+1]; 
       data[j+1] = temp; 
       flag=1; 
      } 
     } 
    } 
} 

void selectionSort(vector<int>& data) 
{ 
    int min, temp, n=data.size(); 

    for (int i=0; i<n; i++) 
    { 
     min = i; 

     for (int j=i+1; j<n; j++) 
     { 
      if (j<min) 
      { 
       temp=i; 
       i=min; 
       min=temp; 
      } 

     } 
    }   
} 

int main() 
{ 
    int n; 
    vector<int> data; 

    cout<<"Vector length?: "<<endl; 
    cin>>n; 

    srand(time(0)); 
    for (int i=0; i<n; i++) 
    { 
     data.push_back(rand()%20+1); 
    } 

    cout<<"Vector: "; 
    for (int i=0; i<data.size(); i++) 
    { 
     cout<<data[i]<<", "; 
    } 

    selectionSort(data); 

    cout<<"Sorted Vector: "; 
    for (int i=0; i<data.size(); i++) 
    { 
     cout<<data[i]<<", "; 
    } 

    system("Pause"); 

    return 0; 




} 
+2

Возможно, установите 'n' в * something * в' selectionSort'. Сейчас это неопределенно, но вы зацикливаетесь на нем. 'data.size()' кажется достойным кандидатом. – WhozCraig

+0

@WhozCraig Но эта функция запускается ** после ** пользователь уже ввел значение n (cin >> n). Поэтому не следует ли просто использовать эту ценность? – Aaron

+2

'' '' '' '' '' '' '' '' '' '' '' '' '' на '' '' '' '' '' '' '' ', который никогда не передается функции. Это разные автоматические переменные. – WhozCraig

ответ

1

метод выбораSort() имеет переменную 'n', которая является полностью случайным значением, которое находится в стеке в этом месте. Вы не инициализировали его!

У вас есть вложенный цикл, который является O (n^2). Скажем, n - 1982734 или какое-то такое сколь угодно большое число. Вы просто перебираете 1982734 * 1982734 раз. ВЕДУЩЕЕ это закончится. Почему вы не печатаете значение 'n' внутри selectionSort(). Просто инициализируйте его размером вектора.

Как прокомментировали другие, вся эта работа продолжается.

 Смежные вопросы

  • Нет связанных вопросов^_^