一个简单的随机数排序程序
a simple program to sort random numbers
我刚刚做了一个简单的程序,可以按顺序对随机数进行排序:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void swap(int &a,int &b){
int temp=a;
a=b;b=temp;
}
int main(int argc, char* argv[]){
static int option;
if(argv[1])option=atol(argv[1]);
else option=0;
srand((unsigned)time(0));
const int size=option;
int array[size];
for(int i=0;i<size;i++){
array[i]=rand()%size;
}
//algorithm
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
if(array[i]>array[j])swap(array[i],array[j]);
}
}
//print
for(int i=0;i<size;i++){
cout<<array[i]<<' ';
}
return 0;
}
你运行是这样的:
time ./a.exe (how much random number to generate)
它在 100000 之前工作正常,但超过 100000 时会出现段错误。
我究竟做错了什么?是不是内存不足???还是 OS 偷偷做了一些我不承认的事??
"is it because of insufficient memory??"
是的,您的筹码量可能太小,放不下这个。使用
std::vector<int> array(size);
而不是
int array[size];
是的,你的堆栈太小了,你可以像这样在堆中分配数组:int *array = (int*)malloc(size*sizeof(int))
。当然也可以用vector,但是vector的封装比较复杂,性能不会很好。
我刚刚做了一个简单的程序,可以按顺序对随机数进行排序:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void swap(int &a,int &b){
int temp=a;
a=b;b=temp;
}
int main(int argc, char* argv[]){
static int option;
if(argv[1])option=atol(argv[1]);
else option=0;
srand((unsigned)time(0));
const int size=option;
int array[size];
for(int i=0;i<size;i++){
array[i]=rand()%size;
}
//algorithm
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
if(array[i]>array[j])swap(array[i],array[j]);
}
}
//print
for(int i=0;i<size;i++){
cout<<array[i]<<' ';
}
return 0;
}
你运行是这样的:
time ./a.exe (how much random number to generate)
它在 100000 之前工作正常,但超过 100000 时会出现段错误。 我究竟做错了什么?是不是内存不足???还是 OS 偷偷做了一些我不承认的事??
"is it because of insufficient memory??"
是的,您的筹码量可能太小,放不下这个。使用
std::vector<int> array(size);
而不是
int array[size];
是的,你的堆栈太小了,你可以像这样在堆中分配数组:int *array = (int*)malloc(size*sizeof(int))
。当然也可以用vector,但是vector的封装比较复杂,性能不会很好。