我写的程序只能生成30000个,300000个没有输出,求大神帮忙
int a[300000];
srand((long)time(NULL));
for(int i=0;i<300000;i++)
a[i]=rand()%990+10;
int b,flag=0;
while(1)
/* 菜单 */
return 0;
试试看用指针在堆上分配
int *a = new int[300000];
把完整代码和结果贴出来
1.这么大的数组,建议在堆上分配空间。
你的完整程序是什么,什么叫没有输出,你的代码根本也没有写输出啊。
for(int i=0;i<300000;i++)
{ a[i]=rand()%990+10; printf("%d ", a[i]); }
既然30000个 没问题,300000个有问题的话就应该是数组太大导致栈内存爆了,可以声明成全局/静态变量或者使用动态内存分配
全部代码
#include #include #include using namespace std;#define N 3000void show(int a) //输出{ for(int i=0;i0&&tempa[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=1; } } } cout<<"冒泡排序:"<= 0; i--) { current = i; for (int pre = 0; pre <= i-1; pre++) { if (a[pre] > a[current]) current = pre; } int temp = a[i]; a[i] = a[current]; a[current] = temp; } cout<<"选择排序:"<base) j--; if(ia[idx]){largest=left;} if(right=0;--i) { Heapfy(a,i,len); //建立最大堆,将堆中最大的值交换到根节点 } for( i=len-1;i>=1;--i) { int temp=a[0]; //将当前堆的根节点交换到堆尾的指定位置 a[0]=a[i]; a[i]=temp; Heapfy(a,0,i); //建立下一次的最大堆 } cout<<"堆排序:"<<endl; show(a); time();} //归并排序 void Merge(int *a, int p, int mid, int r) { int n1 = mid - p + 1; int n2 = r - mid; int *L = new int[n1 + 1]; int *R = new int[n2 + 1]; int i, j, k; for (i = 0; i < n1; i++){ L[i] = a[p + i]; } for (j = 0; j < n2; j++){ R[j] = a[mid + j + 1]; } L[n1] = INT_MAX; R[n2] = INT_MAX; for (i = 0, j = 0, k = p; k <= r; k++) { if (L[i] <= R[j]) { a[k] = L[i]; i++; } else{ a[k] = R[j]; j++; } } delete []L; delete []R; } void Merge_Sort(int *a, int p, int r) { if (p < r) { int mid = (p + r) / 2; Merge_Sort(a, p, mid); Merge_Sort(a, mid + 1, r); Merge(a, p, mid, r); } }int main(){ int a[N]; srand((long)time(NULL)); for(int i=0;i<N;i++) a[i]=rand()%990+10; int b,flag=0; while(1) { cout<<"****************************************************"<>b; switch(b) { case 0:flag=1;break; case 1:InsertSort(a,N);break; case 2:BubbleSort(a,N);break; case 3:select_sort(a,N);break; case 4:quick_sort(a,0,N-1);show(a);time();break; case 5:HeapSort(a,N);break; case 6:Merge_Sort(a,0,N-1);show(a);time();break; default:cout<<"请输入正确的选择!"<<endl; } if(flag) break; } return 0;}