比较C中的排序方法

时间:2017-03-11 21:04:11

标签: c sorting bubble-sort insertion-sort selection-sort

我必须比较这三种排序函数(气泡,插入和选择),以最差,最好和随机可能的方式对数组进行排序(当谈论比较数字的概念时)。

我建立并运行了该程序。编译器正在工作,一切似乎都很好。问题是在cmd窗口出现后没有任何反应。程序没有返回任何内容(既不返回0(因为返回0)或在文件中写入)。我该如何解决?

#include <stdio.h>
#include <stdlib.h>

int b[11000];
int w[11000];
int r[11000];
int n;

int comp;
int attr;

FILE*f;

//CREAREA SIRURILOR
//best, worst, random

void sir(int n)
{ int i;
    for(i=0; i<n; i++)
    {
        b[i] = i;
        r[i] = rand() % n;
        w[i] = n-i-1;

    }
}

//INSERTION SORT
void insertion (int a[1000])
{
    int j, i, index;

    comp = 0;
    attr = 0;

    for (i = 0; i < n; i++)
    {
        index = a[i];
        j = i;
        attr+=1;

        while ((j > 0) && (a[j-1] > index))
        { comp++;
            a[j] = a[j-1];
            j = j-1;
            attr+=1;
        }

        while ((j > 0) || (a[j-1] > index))
        { comp++;
        }
        a[j] = index;
        attr++;
    }

    fprintf(f,"\t%d\t", comp);
    fprintf(f,"\t%d\t", attr);
    fprintf(f,"\t%d\t", attr+comp);
}

//Selection Sort
void selection (int a[1000])
{
    int j, i, min, temp;
    comp = 0;
    attr = 0;
    for (i = 0; i < n-1; i++)
    {
        min = i;
        for (j = i+1; j < n; j++){
            comp++;
            if (a[j] < a[min])
                min = j;
        }
        temp = a[i];
        a[i] = a[min];
        a[min] = temp;
        attr+=3;
    }
fprintf(f,"\t%d\t", comp);
fprintf(f,"\t%d\t", attr);
fprintf(f,"\t%d\t", attr+comp);
}


//Bubble Sort
void bubblesort (int array[2000])
{
    int sorted;
    int swap,d;
    int c;

    comp = 0;
    attr = 0;

    for (c = 0 ; c < ( n - 1 ); c++)
    {
        for (d = 0; d < n - c - 1; d++)
        {
        comp++;
        if (array[d] > array[d + 1])
        {

            swap = array[d];
            array[d] = array[d + 1];
            array[d + 1] = swap;
            attr += 3;
        }
        }
    }

    fprintf(f,"\t  %d\t", comp);
    fprintf(f,"\t  %d\t", attr);
    fprintf(f,"\t%d\t", attr+comp);
}

void InsertionSort()
{
    insertion(b);
    insertion(r);
    insertion(w);
}

void SelectionSort()
{
    selection(b);
    selection(r);
    selection(w);
}

void BubbleSort()
{
    bubblesort(b);
    bubblesort(r);
    bubblesort(w);
}


int main ()
{

    f = fopen("iesire.txt","w+");
    if(f == NULL)
    {
        printf("Error!");
        exit(-1);
    }

    fprintf(f,"\n Bubble Sort\t\n");
    fprintf(f,"\tBest\t\t\t\t\t\tAverage\t\t\t\t\t\tWorst\t\t\n");
    fprintf(f,"\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\n");

    for (n = 100; n<=10000; n+=500)
    {

        sir(n);
        BubbleSort();
        fprintf(f,"\n");
    }

    fprintf(f,"\n\n Selection Sort\t\n");
    fprintf(f,"\tBest\t\t\t\t\t\tAverage\t\t\t\t\t\tWorst\t\t\n");
    fprintf(f,"\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\n");

    for (n = 100; n<=10000; n+=500)
    {
        sir(n);
        InsertionSort();
        fprintf(f,"\n");
    }

    fprintf(f,"\n\n Insertion Sort\t\n");
    fprintf(f,"\tBest\t\t\t\t\t\tAverage\t\t\t\t\t\tWorst\t\t\n");
    fprintf(f,"\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\t\tComparatii\t\tAtribuiri\t\tComp+Atr\n");

    for (n = 100; n<=10000; n+=500)
    {
        sir(n);
        SelectionSort();
        fprintf(f,"\n");
    }

    fclose(f);
    printf(" Result: 'iesire.txt'.");

return 0;
}

0 个答案:

没有答案