我在C中有一个小程序,尽管没有来自编译器的警告(使用cygwin的netbeans),它只是无法运行而没有在控制台中给我任何提示。我的编译器不能正常工作吗?代码中可能有什么问题?
这是代码。该程序基本上多次创建和排序一些数组,以比较不同的排序方法。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
*
*/
//void preenchendo (int, int);
//void bubblesort (int, int, int *, int *);
//void selectsort (int, int, int *, int *);
//void insertsort (int, int, int *, int *);
void preenchendo (int n, int vetor[n]) {
srand((unsigned)time(NULL));
int contador;
for(contador = 0; contador < n; contador++) {
vetor[contador] = rand() % n;
}
}
void bubblesort (int vetor[], int n, int * troca, int * comp) {
*troca = 0;
*comp = 0;
int foi = 0;
int end = n;
int contador;
do{
for(contador = 0; contador < end; contador++) {
if(vetor[contador] > vetor[contador+1]){
int aux = vetor[contador];
vetor[contador] = vetor[contador+1];
vetor[contador+1] = aux;
foi=1;
*troca++;
}
*comp++;
}
end--;
}while(troca == 0);
}
void selectsort (int vetor[], int n, int * troca, int * comp) {
*troca = 0;
*comp = 0;
int min;
int contador, contador2;
for(contador = 0; contador < n-1; contador++) {
min = contador;
for(contador2 = contador+1; contador2 < n; contador2++) {
if(vetor[contador2] < vetor[min]) {
min = contador2;
}
*comp++;
}
if(min != contador) {
int aux = vetor[contador];
vetor[contador] = vetor[min];
vetor[min] = aux;
*troca++;
}
*comp++;
}
}
void insertsort (int vetor[], int n, int * troca, int * comp) {
*troca = 0;
*comp = 0;
int aux;
int contador;
for(contador = 1; contador < n; contador++) {
int element = vetor[contador];
int pos = contador-1;
while(pos >= 0 && element < vetor[pos]) {
vetor[pos+1] = vetor[pos];
pos--;
*comp++;
*troca++;
}
vetor[pos+1] = element;
}
}
void main(int argc, char** argv) {
{
int vetor1[1000], vetor2[10000], vetor3[50000], vetor4[500000]; //vetores originais
int vet1[1000], vet2[10000], vet3[50000], vet4[500000]; //ordenados
int veti1[1000], veti2[10000], veti3[50000], veti4[500000]; //ordenados inversamente
int troca, comp, contador, contador2;
preenchendo(1000, vetor1);
preenchendo(10000, vetor2);
preenchendo(50000, vetor3);
preenchendo(500000, vetor4);
for(contador = 0; contador < 1000; contador++) {
vet1[contador] = vetor1[contador];
}
for(contador = 0; contador < 10000; contador++) {
vet2[contador] = vetor2[contador];
}
for(contador = 0; contador < 50000; contador++) {
vet3[contador] = vetor3[contador];
}
for(contador = 0; contador < 500000; contador++) {
vet4[contador] = vetor4[contador];
}
////////////////////////////////////////////////////////////////////////////
clock_t inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet1, 1000, &troca, &comp);
clock_t fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(vet4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet1, 1000, &troca, &comp);
printf("Select ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet2, 10000, &troca, &comp);
printf("Select ordenado 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet3, 50000, &troca, &comp);
printf("Select ordenado 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(vet4, 500000, &troca, &comp);
printf("Select ordenado 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet1, 1000, &troca, &comp);
printf("Insert ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet2, 10000, &troca, &comp);
printf("Insert ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet3, 50000, &troca, &comp);
printf("Insert ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(vet4, 500000, &troca, &comp);
printf("Insert ordenado 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
contador2 = 999;
for(contador = 0; contador < 1000; contador++) {
veti1[contador] = vet1[contador2];
contador2--;
}
contador2 = 9999;
for(contador = 0; contador < 10000; contador++) {
veti2[contador] = vet2[contador2];
contador2--;
}
contador2 = 49999;
for(contador = 0; contador < 50000; contador++) {
veti3[contador] = vet3[contador2];
contador2--;
}
contador2 = 499999;
for(contador = 0; contador < 500000; contador++) {
veti4[contador] = vet4[contador2];
contador2--;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(veti1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado inv 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(veti2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado inv 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(veti3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado inv 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
bubblesort(veti4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Bubble ordenado inv 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(veti1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select ordenado inv 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(veti2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select ordenado inv 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(veti3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select ordenado inv 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
selectsort(veti4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Select ordenado inv 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
////////////////////////////////////////////////////////////////////////////
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(veti1, 1000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert ordenado inv 1000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(veti2, 10000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert ordenado inv 10000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(veti3, 50000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert ordenado inv 50000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
inicio = clock()/(CLOCKS_PER_SEC/1000);
insertsort(veti4, 500000, &troca, &comp);
fim = clock()/(CLOCKS_PER_SEC/1000);
printf("Insert ordenado inv 500000\n");
printf("Elapsed time: %d\n", (fim-inicio));
printf("Trocas: %d\n", troca);
printf("Comparacoes: %d\n\n", comp);
system("pause");
//return (0);
}
答案 0 :(得分:3)
我的猜测是堆栈溢出。是的,真的。
假设一个32位整数,这些:
int vetor1[1000], vetor2[10000], vetor3[50000], vetor4[500000]; //vetores originais
int vet1[1000], vet2[10000], vet3[50000], vet4[500000]; //ordenados
int veti1[1000], veti2[10000], veti3[50000], veti4[500000]; //ordenados inversamente
最终使用大约6732000字节,或大约6.4 MB。这可能比操作系统认为您应该使用的更多。
考虑尝试使用malloc()
在堆上分配这些内容,或者检查适用于您平台的限制。