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 + -
显示快捷键?