-
Notifications
You must be signed in to change notification settings - Fork 0
/
ranksort.c
72 lines (67 loc) · 1.62 KB
/
ranksort.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
void gera_vetor( long *, long );
void print_vetor( long *, long );
long get_qtd_menor( long *, long, long );
int main( int argc, char** argv ){
long *v1, *v2, tam, temp;
double tempo_inicial, tempo_final;
printf("Informe o tamanho do vetor: \n");
scanf("%ld", &tam);
v1 = ( long * ) malloc( sizeof( long ) * tam );
v2 = ( long * ) malloc( sizeof( long ) * tam );
if( v1 == NULL || v2 == NULL ){
printf("[x] ERRO: memoria não foi alocada para o array...\n");
return 1;
}
printf("[*] INFO: preenchendo vetor...\n");
gera_vetor( v1, tam );
printf("[*] INFO: exibindo vetor criado...\n" );
print_vetor( v1, tam );
printf("[*] INFO: ordenando elementos...\n" );
tempo_inicial = MPI_Wtime();
for ( int i = 0; i < tam; ++i ){
temp = get_qtd_menor( v1, tam, i );
v2[temp] = v1[i];
}
tempo_final = MPI_Wtime();
printf("[*] INFO: exibindo vetor ordenado...\n" );
print_vetor( v2, tam );
printf("tempo decorrido: %f segundos\n", tempo_final - tempo_inicial);
free( v1 );
free( v2 );
return 0;
}
long get_qtd_menor( long *v, long tam, long indice){
long i, qtd = 0;
for ( int i = 0; i < tam; ++i ){
if ( i == indice ) continue;
if ( v[i] < v[indice] ) qtd++;
}
return qtd;
}
void gera_vetor( long *v, long tam ){
long i, j;
int flag;
for( i = 0; i < tam; i++ ){
flag = 1;
while( flag ){
flag = 0;
v[i] = rand() % ( tam * 10 );
for( j = 0; j < i; j++ ){
if( v[j] == v[i] ){
flag = 1;
break;
}
}
}
}
}
void print_vetor( long *v, long tam ){
long i;
for( i = 0; i < tam; i++ ){
printf( "%ld, ", v[i] );
}
printf( "\n" );
}