我有一个由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;
}
答案 0 :(得分:1)
selectionSort()方法具有变量“n”,它完全是一个恰好位于该位置堆栈上的随机值。你还没有初始化它!
你有一个嵌套循环,它是O(n ^ 2)。说n是1982734或一些这样的任意大数。你只是在1982734 * 1982734次循环。事实上它会完成。为什么不在selectionSort()中打印'n'的值。只需用向量的大小初始化它。
正如其他人评论的那样,整个工作正在进行中。