Итак, у меня есть этот код, который сортирует массив по 5 методам: пузырьковая сортировка, вставка, оболочка, быстрая сортировка и выделение. Мне также нужно отсортировать массив от наименьшего элемента к самому большому (например, от 1 до 10) и показать количество итераций и количество сравнений, но я не могу найти способ сделать это.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int a[10000],b[10000];
long int c[5],k;
float d[5];
float B(int t)
{
clock_t me,ti;
int aux,i,j;
float w;
me=clock();
for(i=1;i<t;i++)
for(j=i;j>0;j--)
if(a[j]<a[j-1])
{
aux=a[j];
a[j]=a[j-1];
a[j-1]=aux;
k++;
}
ti=clock();
w=(float)(ti-me)/CLOCKS_PER_SEC;
return w;
}
float I(int t)
{
clock_t me,ti;
int aux,i,j;
float w;
me=clock();
for(i=0;i<t-1;i++)
for(j=1;j<t-i;j++)
if(a[i+j]<a[i])
{
aux=a[i];
a[i]=a[i+j];
a[i+j]=aux;
k++;
}
ti=clock();
w=(float)(ti-me)/CLOCKS_PER_SEC;
return w;
}
float S(int t)
{
clock_t me,ti;
int i,j,min,lm;
float w;
me=clock();
for(i=0;i<t-1;i++)
{
min=a[i];lm=i;
for(j=i+1;j<t;j++)
if(a[j]<min)
{
min=a[j];
lm=j;
}
a[lm]=a[i];
a[i]=min;
k++;
}
ti=clock();
w=(float)(ti-me)/CLOCKS_PER_SEC;
return w;
}
float Sh(int t)
{
clock_t me,ti;
int aux,i,j,pas;
float w;
me=clock();
for(pas=t/2;pas>0;pas/=2)
for(i=pas;i<t;i++)
for(j=i-pas;j>=0&&a[j]>a[j+pas];j-=pas)
{
aux=a[j];
a[j]=a[j+pas];
a[j+pas]=aux;
k++;
}
ti=clock();
w=(float)(ti-me)/CLOCKS_PER_SEC;
return w;
}
void Q(int v,int t)
{
int i,j;
float aux,x;
x=a[v];
i=v;
j=t;
while(i<j)
{
while(a[i]<=x&&i<t)
i++;
while(a[j]>x)
j--;
if(i<j)
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
k++;
}
}
if(j>v)
{
a[v]=a[j];
a[j]=x;
k++;
}
if(v<j-1)
Q(v,j-1);
if(t>j+1)
Q(j+1,t);
}
int main()
{
int al,i,n;
clock_t me,ti;
printf("Select array size...\n");
printf("\t1. 100 elements.\n");
printf("\t2. 1000 elements.\n");
printf("\t3. 10000 elements.\n");
printf("\t0. Close the programm.\n");
printf("Your choise is ");
scanf("%i",&al);
switch(al)
{
case 1 :
n=100;
for(i=0;i<n;i++)
a[i]=-99+rand()/(RAND_MAX/(99-(-99)+1)+1);
printf("\nInitial array...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n");
for(i=0;i<n;i++)
b[i]=a[i];
k=0;
d[0]=B(n);
c[0]=k;
printf("\nArray sorted with bubblesort...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n\n");
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[1]=I(n);
c[1]=k;
printf("Array sorted with insertion...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n\n");
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[2]=S(n);
c[2]=k;
printf("Array sorted with selection...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n\n");
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[3]=Sh(n);
c[3]=k;
printf("Arrau sorted with shell...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n\n");
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
me=clock();
Q(0,n-1);
ti=clock();
d[4]=(float)(ti-me)/CLOCKS_PER_SEC;
c[4]=k;
printf("Array sorted with quicksort...\n");
for(i=0;i<n;i++)
printf("%4i ",a[i]);
printf("\n\n");
printf("\t Results...\n");
printf("\t|=============|============|=================|\n");
printf("\t| Name | Time | Nr of changes |\n");
printf("\t|=============|============|=================|\n");
printf("\t| Bubble sort | %f | %5li |\n",d[0],c[0]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Insertion | %f | %5li |\n",d[1],c[1]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Selection | %f | %5li |\n",d[2],c[2]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Shell | %f | %5li |\n",d[3],c[3]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Quicksort | %f | %5li |\n",d[4],c[4]);
printf("\t|-------------|------------|-----------------|\n");
break;
case 2 :
n=1000;
for(i=0;i<n;i++)
a[i]=-99+rand()/(RAND_MAX/(99-(-99)+1)+1);
for(i=0;i<n;i++)
b[i]=a[i];
k=0;
d[0]=B(n);
c[0]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[1]=I(n);
c[1]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[2]=S(n);
c[2]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[3]=Sh(n);
c[3]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
me=clock();
Q(0,n-1);
ti=clock();
d[4]=(float)(ti-me)/CLOCKS_PER_SEC;
c[4]=k;
printf("\t Results...\n");
printf("\t|=============|============|=================|\n");
printf("\t| Name | Time | Nr of changes |\n");
printf("\t|=============|============|=================|\n");
printf("\t| Bubble sort | %f | %7li |\n",d[0],c[0]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Insertion | %f | %7li |\n",d[1],c[1]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Selection | %f | %7li |\n",d[2],c[2]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Shell | %f | %7li |\n",d[3],c[3]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Quicksort | %f | %7li |\n",d[4],c[4]);
printf("\t|-------------|------------|-----------------|\n");
break;
case 3 :
n=10000;
for(i=0;i<n;i++)
a[i]=-99+rand()/(RAND_MAX/(99-(-99)+1)+1);
for(i=0;i<n;i++)
b[i]=a[i];
k=0;
d[0]=B(n);
c[0]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[1]=I(n);
c[1]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[2]=S(n);
c[2]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
d[3]=Sh(n);
c[3]=k;
for(i=0;i<n;i++)
a[i]=b[i];
k=0;
me=clock();
Q(0,n-1);
ti=clock();
d[4]=(float)(ti-me)/CLOCKS_PER_SEC;
c[4]=k;
printf("\t Results...\n");
printf("\t|=============|============|=================|\n");
printf("\t| Name | Time | Nr of changes |\n");
printf("\t|=============|============|=================|\n");
printf("\t| Bubble sort | %f | %9li |\n",d[0],c[0]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Insertion | %f | %9li |\n",d[1],c[1]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Selection | %f | %9li |\n",d[2],c[2]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Shell | %f | %9li |\n",d[3],c[3]);
printf("\t|-------------|------------|-----------------|\n");
printf("\t| Quicksort | %f | %9li |\n",d[4],c[4]);
printf("\t|-------------|------------|-----------------|\n");
break;
case 0:
printf("\n!You closed the programm.\n");
break;
default:
printf("\n!Error!\n");
break;
}
}