Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-06-2009, 19:52   #1
Rsk
Senior Member
 
L'Avatar di Rsk
 
Iscritto dal: Dec 2006
Messaggi: 314
[c] problema confronto algoritmi Ordinamento

Ragazzi ho un problema con questo codice.. mi da dei valori decisamente elevati per quanto riguarda i tempi di esecuzione di alcuni algoritmi.. inoltre i numeri di scambi e confronti sembra troppo elevato..
siete in grado di aiutarmi?

Codice PHP:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define MAX_CIFRE 5
#define RADICE_SIZE 10
#define MAX 50000

typedef struct list_node *list_pointer;
typedef struct list_node{
           
int chiave[MAX_CIFRE];
        
list_pointer link;
        }
lista;
list_pointer testa=NULL;

void copia(int a[],int l[],int);
void analisi(int a[],int n);
void lettura(int a[],int);
void selezione(int a[],int);
void inserzione(int a[],int,int);
void quick_sort(int a[],int,int);
void merge_sort(int a[],int,int);
void heap_sort(int a[],int);
void radix_sort(int a[],int);
void scambia(int*,int*);

int scambio,confronto;

main()
{
 
int lista[MAX];
 
int n,i,j,scelta=-1,temp,b=0,cont=0;
 
puts("\n\n\t\t CONFRONTO ALGORITMI DI ORDINAMENTO");
 
printf("\n\n  Numero elementi da ordinare(max %d) --> ", MAX);
 
scanf("%d", &n);
 do
 {
  
  
puts("\n\n\t DATI IN INPUT\n");
  
puts("\t1 - Ordinato");
  
puts("\t2 - Quasi Ordinato");
  
puts("\t3 - Inversamante Ordinato");
  
puts("\t4 - Casuale");
  
puts("\t0 - Uscita");
  
printf("  \tScelta: ");
  
scanf("%d", &scelta);
  
  switch(
scelta)
  {
   case 
1:  for(i=1;i<=n;i++) lista[i]=i;
            break;

   case 
2:  temp=n/10;
            for(
i=0;i<n;i++){
                
cont++;
                 if(
cont==temp){b++;cont=0;}
                 if(
b%2) lista[i]=rand()%n-1;
                 else 
lista[i]=i;
            }
            break;

   case 
3:  for(i=0,j=n;i<n;i++,j--) lista[i]=j;
            break;

   case 
4:  for(i=0;i<n;i++) lista[i]=rand()%n-1;
            break;

   default: if(
scelta!=0){
                   
puts("\n\tERRORE..");
               }
            break;
  }
  if(
scelta) analisi(lista,n);
 }
 while(
scelta);
}

void copia(int a[],int l[],int n)
{
 
int i;
 for(
i=0;i<n;i++) a[i]=l[i];
}

void analisi(int lista[],int n)
{
 
clock_t start,end;
 
int a[MAX];

 
puts("\n\n\t\t  TABELLA CONFRONTO ALGORITMI ");
 
puts("\n\n\tAlgoritmo \tScambi\tConfronti\t\tTempo");

 
copia(a,lista,n);
 
confronto=scambio=0;
 
start=clock();
 
selezione(a,n);
 
end=clock();
 
printf("\n\tSelezione \t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
copia(a,lista,n);
 
start=clock();
 
inserzione(a,1,n-1);
 
end=clock();
 
printf(" sec\n\tInserzione\t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
copia(a,lista,n);
 
start=clock();
 
quick_sort(a,0,n-1);
 
end=clock();
 
printf(" sec\n\tRapido    \t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
copia(a,lista,n);
 
start=clock();
 
merge_sort(a,0,n-1);
 
end=clock();
 
printf(" sec\n\tFusione   \t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
copia(a,lista,n);
 
start=clock();
 
heap_sort(a,n);
 
end=clock();
 
printf(" sec\n\tHeap      \t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
copia(a,lista,n);
 
start=clock();
 
radix_sort(a,n);
 
end=clock();
 
printf(" sec\n\tRadice    \t%3d\t%3d\t\t%3.3f",scambio,confronto,(end-start)/(float)CLOCKS_PER_SEC);

 
puts(" sec\n\n\tINVIO PER CONTINUARE..");
 
fflush(stdin);
 
getchar();
}

void lettura(int a[],int n)
{
 
int i;
 
puts("\n\t\t\t\t LA LISTA CONTIENE ");
 for(
i=0;i<n;i++)
  
printf("%.4d ",a[i]);
 
fflush(stdin);
 
getchar();
}

/* SELEZIONE */
void selezione(int a[],int n)
{
 
int i,j,min;
 for(
i=0;i<n-1;i++)
 {
  
min=i;
  for(
j=i+1;j<n;j++)
  {
   
confronto++;
      if(
a[j]<a[min]) min=j;
  }
  
scambia(&a[i],&a[min]);
 }
}

/* INSERZIONE */
void inserzione(int a[],int primo,int ultimo)
{
 
int i,j,prossimo;
 for(
i=primo;i<ultimo;i++)
 {
  
prossimo=a[i];
  for(
j=i-1;j>=primo && prossimo<a[j];j--)
  {
   
scambio++;confronto++;
   
a[j+1]=a[j];
  }
  
scambio++;
  
a[j+1]=prossimo;
 }
}

/* QUICK SORT */
void quick_sort(int a[],int u,int v)
{
 
int perno(int a[],int,int);
 
int p;
 
confronto++;
 if(
v==u) return;
 
p=perno(a,u,v);
 
 if(
u<p) quick_sort(a,u,p-1);
 
confronto++;
 if(
p<v) quick_sort(a,p+1,v);
}

int perno(int a[],int primo,int ultimo)
{
 
int i=primo,j=ultimo+1,pivot=a[primo];

 do
 {
  do 
i++; while(a[i]<pivot && i<j);
  do 
j--; while(a[j]>pivot && j>primo);
  if(
i<j) {scambia(&a[i],&a[j]);}
 }
 while(
i<j);
 
scambia(&a[primo],&a[j]);
 return 
j;
}

void scambia(int *a1,int *a2)
{
 
scambio++;
 
int park;
 
park=*a1;
 *
a1=*a2;
 *
a2=park;
}

/* MERGE SORT */
void merge_sort(int a[],int lower,int upper)
{
 
void merge(int a[],int,int,int);
 
int medium;
 
confronto++;
 if(
lower<upper)
 {
  
medium=(lower+upper)/2;
  
merge_sort(a,lower,medium);
  
merge_sort(a,medium+1,upper);
  
merge(a,lower,medium,upper);
 }
}

void merge(int a[],int i,int m,int n)
{
 
int ordinata[MAX],j,k,t,inizio=i;

 
j=m+1;
 
k=i;
 while(
i<=m && j<=n)
 {
  
confronto++;
  if(
a[i]<a[j])
          
ordinata[k++]=a[i++];
  else
          
ordinata[k++]=a[j++];
 }

 if(
i>m)
     for(
t=j;t<=n;t++) ordinata[k+t-j]=a[t];
 else
   for(
t=i;t<=m;t++) ordinata[k+t-i]=a[t];

 for(
t=inizio;t<=n;t++) {scambio++;a[t]=ordinata[t];}
}

/* HEAP SORT */
void heap_sort(int a[],int n)
{
 
void adatta(int a[],int,int);
 
int i,park;
 for(
i=n/2;i>0;i--) adatta(a,i,n);
 for(
i=n-1;i>0;i--)
 {
  
scambio++;
  
park=a[1];
  
a[1]=a[i+1];
  
a[i+1]=park;
  
adatta(a,1,i);
 }
}

void adatta(int a[],int radice,int n)
{
 
int figlio,temp,chiave;

 
temp=a[radice];
 
chiave=a[radice];
 
figlio=2*radice;
 while(
figlio<=n)
 {
  
confronto++;
  if((
figlio<n) && a[figlio]<a[figlio+1])
      
figlio++;
  
confronto++;
  if(
chiave>a[figlio])
      break;
  else
  {
   
scambio++;
   
a[figlio/2]=a[figlio];
   
figlio*=2;
  }
 }
 
scambio++;
 
a[figlio/2]=temp;
}

/* RADIX SORT */
void radix_sort(int a[],int n)
{
 
list_pointer crea_lista(list_pointer,int);
 
list_pointer radice_sort(list_pointer);
 
int i;
 for(
i=0;i<n;i++)
  
testa=crea_lista(testa,a[i]);
 
testa=radice_sort(testa);
}

list_pointer crea_lista(list_pointer inizio,int q)
{
 
list_pointer temp,succ;
 
int j,r;
 
succ=inizio;

 if((
temp=(list_pointer)malloc(sizeof(lista)))==NULL)
      {
puts("memory error");exit(1);}
  
temp->link=NULL;
  for(
j=MAX_CIFRE-1;j>=0;j--)
  {
   
r=q%10;
   
q=q/10;
   
temp->chiave[j]=r;
  }
  if(!
inizio)
      return(
temp);
  while(
succ->link)
      
succ=succ->link;
  
succ->link=temp;
  return(
inizio);
}

list_pointer radice_sort(list_pointer ptr)
{
 
list_pointer davanti[RADICE_SIZE],dietro[RADICE_SIZE];
 
int i,j,cifra;

 for(
i=MAX_CIFRE-1;i>=0;i--)
 {
  for(
j=0;j<RADICE_SIZE;j++) davanti[j]=dietro[j]=NULL;
  while(
ptr)
  {
   
cifra=ptr->chiave[i];
   if(!
davanti[cifra])
       
davanti[cifra]=ptr;
   else
       
dietro[cifra]->link=ptr;
   
dietro[cifra]=ptr;
   
ptr=ptr->link;
  }
  
ptr=NULL;
  for(
j=RADICE_SIZE-1;j>=0;j--)
  {
      if(
davanti[j])
   {
    
dietro[j]->link=ptr;
    
ptr=davanti[j];
   }
  }
 }
 return 
ptr;
} 
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB
Rsk è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
HillMiles MileCity1 a 616€: la city e-bi...
GAC Aion UT, prima prova: tanta roba a 2...
vivo X300 Pro a 979€: il top di gamma co...
AGIBOT fa ballare 110 Expedition A3 per ...
iPad A16 da 11'' scende a 459€ in tutti ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v