PDA

View Full Version : [C] Problema sort


Luc@s
14-05-2007, 19:48
#include <stdio.h>

void sort(int [], int);
void printv(int [], int);

int main(int argc)
{
int v[] = {4, 9, 2, 3, 6, 1};
printv(v, 5);
puts(" == ");
sort(v, 5);
puts(" == ");
printv(v, 5);
return 0;
}

void sort(int v[], int size)
{
int i, tmp;
for(i = 0; i < size; i++)
{
if(v[i] < v[i+1])
{
printf("%d => %d\n", v[i], v[i+1]);
tmp = v[i+1];
v[i+1] = v[i];
v[i] = tmp;
}
if(v[i] > v[i-1])
{
printf("%d => %d\n", v[i], v[i+1]);
tmp = v[i-1];
v[i-1] = v[i];
v[i] = tmp;
}
}
}

void printv(int v[], int size)
{
int i;
for(i = 0; i < size; i++)
{
printf("%d\n", v[i]);
}

}



Mi da come out:


ouroboros@ouroboros-desktop:~/Desktop$ gcc -O2 -s -o Out sort.c
ouroboros@ouroboros-desktop:~/Desktop$ ./Out
4
9
2
3
6
==
4 => 9
2 => 3
2 => 6
6 => 2
==
9
4
6
3
2


Cosa sbaglio(è da un po che non tocco C...)???
L'ho scritto senza sapere cosa fare...o provato a vedere cosa avrei fatto su carta e l'ho trasposto...
Tnks

-fidel-
14-05-2007, 20:04
Cosa sbaglio(è da un po che non tocco C...)???


Sbagli l'algoritmo di ordinamento :)
A parte il fatto che, quando i == 0, fare

if(v[i] > v[i-1])

non ha molto senso, anzi è un grave errore, mi sembra difficile (è un eufemismo ;))che riuscirai ad ordinare il vettore in quel modo in un unico passaggio (con un solo for).
La cosa che puoi implementare più facilmente, e che ricalca quello che volevi fare, è questo:


/* Ordinamento dal più grande al più piccolo */
void sort(int v[], int size)
{
int i, j, tmp;
for(i = size; i > 0; i--)
{
for (j = 0; j < (i - 1); j++)
{
if(v[j] < v[j+1])
{
printf("%d => %d\n", v[j], v[j+1]);
tmp = v[j+1];
v[j+1] = v[j];
v[j] = tmp;
}
}
}
}

Luc@s
14-05-2007, 20:06
Sbagli l'algoritmo di ordinamento :)
A parte il fatto che, quando i == 0, fare

if(v[i] > v[i-1])

non ha molto senso, anzi è un grave errore, mi sembra difficile che riuscirai ad ordinare il vettore in quel modo in un unico passaggio (con un solo for).
La cosa che puoi implementare più facilmente, e che ricalca quello che volevi fare, è un bubble sort.

:eek: :eek:

tnks... era da un po che non programmichiavo...hai ragione

-fidel-
14-05-2007, 20:13
:eek: :eek:

tnks... era da un po che non programmichiavo...hai ragione

Ah, quel codice che ho postato è ottimizabile, tra 2 min lo ottimizzo un pochino ;)

EDIT: ok l'ho aggiustato, è sempre un bubble sort comunque.