bubble2.txt

来自「冒泡排序」· 文本 代码 · 共 160 行

TXT
160
字号
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "conio.h"
long int k=0,l=0,m=0,n=0,o=0,nn=0;
long int num=0,tempnum=0,index=0,t;
long int arr[5000]={0},bubarr[5000]={0},Limit=0,LIMIT=0;
long int bool=1;
long int If=0,InIf=0;
long double Nocompare=0;
char ch;
FILE *fPtr; // FILE POINTER for BUBLE.XLS
//PROTOTYPES //
void _Random(int); //FINDS N DIFFERENT NUMBERS FROM 0 TO N
void _Display(int); //DISPLAYS THE ARRAY
void _Restore(long Genarr[]); //RESTORE THE ARRAY (MAKES ALL ELEMENTS 0)
void _BubleSort(long Array[],long Size); //BUBLE SORTING
void _TransferArray(void); // TRANSFER AN ARRAY TO ANOTHER
double _Expected(long d); //FIND EXPECTED VALUE OF EXCHANGE
void _Write(long int,double);//WRITE DATA IN BUBLE.XLS
void _Write(long int MYLIMIT,double MYRES)


    {
    fprintf(fPtr,"[0,%ld)",MYLIMIT); //WRITE RANGE
    fprintf(fPtr,"\t%ld",If); //WRITE # OF COMPARISONS
    fprintf(fPtr,"\t%ld",InIf); //WRITE # OF EXCHANGES
    fprintf(fPtr,"\t%0.1f",MYRES); //WRITE EXPECTED VALUE OF EXCHANGE
    fprintf(fPtr,"\t%0.1f",MYRES-InIf);
}
//FIND EXPECTED VALUE
double _Expected(long d)


    {
    double res=0;
    long float gg=0;
    /*res=(double)pow(d,2)/2;
    res-=(double)(d/2);*/
    for (gg=0;gg<d;gg++)
    res+=gg;
    res= float (res / 2);
    return res;
}
//TRANSFERRING ARRAY INTO ANOTHER ARRAY
void _TransferArray(void)


    {
    int counter=0,Index=0;
    while (counter<=1)


        {
        if (arr[Index]==0)


            {
            if (counter==0) { bubarr[Index]=arr[Index]; counter++; Index++; }
            else counter++;
        }
        else { bubarr[Index]=arr[Index]; Index++; }
    }
}
//RESTORING THE ARRAY
void _Restore(long Genarr[])


    {
    int xx=0;
    for (xx=0;xx<Limit;xx++) Genarr[xx]=0;
}
// DISPLAY THE ARRAY //
void _Display(long int Genarr[])


    {
    int p=0;
    for (p=0;p<Limit;p++) printf(" %d ",Genarr[p]); printf("\n");
}
// FINDING RANDOM NUMBERS //
void _Random(long limit)


    {
    k=0; l=0; bool=1; index=0;
    for (k=0;k<limit;k++)


        {
        label2:
        num=rand()%limit;
        for (l=0;l<index;l++) { if (arr[l]==num) { bool=0; goto label1; } }
        label1:
        if (bool==0) { bool=1; goto label2; }
        else if (bool==1) { arr[index]=num; index++; }
    }
    limit=0;
}
//BUBLE SORTING
void _BubleSort(long Array[],long Size )


    {
    long i, j, temp;
    for(i=0;i<Size-1;i++)
    for(j=0;j<Size-1;j++)


        {
        If++; //COMPARISON COUNTER INCREASES BY ONE
        if(Array[j]>Array[j+1]) //COMPARISON


            {
            InIf++;//EXCHANGE COUNTER INCREASES BY ONE
            temp=Array[j];
            Array[j]=Array[j+1];
            Array[j+1]=temp;
        }
    }
}
//MAIN FUNCTION
void main(void)


    {
    srand((unsigned) time(&t));//FOR RANDOMIZING
    clrscr();
    fPtr=fopen("C:\Buble.xls","w");
    fprintf(fPtr,"Range\tIf Cond\tIn If Cond\tExpected\n");
    fprintf(fPtr,"\n");
    Limit=4; //N BEGINS FROM 4
    LIMIT=Limit;
    for (nn=0;nn<=800;nn++) //OUTER LOOP


        {
        for (o=0;o<3;o++) //INNER LOOP


            {
            _Restore(arr);
            _Restore(bubarr);
            _Random(Limit);
            _Display(arr);
            _TransferArray();
            _BubleSort(bubarr,LIMIT); //printf("\n" );
            _Display(bubarr);
            printf("If Cond:%ld In If State.:%ld Expected Value:%0.0f Difference:%0.0f\n\n",If,InIf,_Expected(LIMIT),float (_Expected(LIMIT)-InIf));
            _Write(LIMIT,_Expected(LIMIT));
            fprintf(fPtr,"\n");
            if (ch==27) exit(0);
            bool=1; k=0; l=0; m=0; index=0; If=0; InIf=0;
        }
        Limit+=2; LIMIT+=2; //LIMIT INCREASES BY 2
    }
    fclose(fPtr);//CLOSE BUBLE/XLS
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?