Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <sys/time.h>
- #include <math.h>
- #define UMBRAL 1
- double microsegundos() {
- struct timeval t;
- if (gettimeofday(&t, NULL) < 0 )
- return 0.0;
- return (t.tv_usec + t.tv_sec * 1000000.0);
- }
- void ordenacionPorInsercion (int v[],int n) {
- int i;
- int j;
- int x;
- for (i = 1; i <= n - 1; i++) {
- x = v[i];
- j = i - 1;
- while (j > -1 && v[j] > x) {
- v[j + 1] = v[j];
- j = j - 1;
- }
- v[j + 1] = x;
- }
- }
- void inicializar_semilla() {
- srand(time(NULL));
- }
- void aleatorio(int v [], int n) {/* se generan números pseudoaleatorio entre -n y +n */
- int i, m=2*n+1;
- for (i=0; i < n; i++)
- v[i] = (rand() % m) - n;
- }
- void ascendente(int v [], int n) {
- int i;
- for (i=0; i < n; i++)
- v[i] = i;
- }
- void descendente(int v [], int n){
- int i;
- int j;
- for (i=0; i < n; i++) {
- j = 10 - i;
- v[i] = j;
- }
- }
- void ordenarAux (int V[], int izq, int der){
- int i;
- int j;
- int x;
- int Aux;
- int pivote;
- if(izq+ UMBRAL <= der){
- if(izq>der){
- x = (rand() % (izq + 1 - der)) + der;
- }else{
- x = (rand() % (der + 1 - izq)) + izq;
- }
- pivote = V[x];
- Aux=V[izq], V[izq]=V[x],V[x]=Aux;
- i = izq + 1;
- j = der;
- for(;i <= j;i++){
- for(;i <= der && V[i] < pivote;i++){
- }
- for(;V[j] > pivote;j--){
- }
- if( i <= j){
- Aux= V[i] , V[i]=V[j],V[j]=Aux;
- i = i + 1;
- j = j - 1;
- }
- }
- Aux=V[izq] , V[izq]=V[j],V[j]=Aux;
- ordenarAux (V,izq,j-1);
- ordenarAux (V,j+1,der);
- }
- }
- void ordenacionRapida(int V[], int izq, int der){
- ordenarAux(V,izq, der);
- if (UMBRAL>1){
- ordenacionPorInsercion(V,der);
- }
- }
- void test(int a[], int tamano){
- int i;
- aleatorio(a,tamano);
- for(i=0;i<tamano;i++){
- printf("%d ",a[i]);
- }
- printf("\n");
- ordenacionPorInsercion(a,tamano);
- for(i=0;i<tamano;i++){
- printf("%d ",a[i]);
- }
- }
- void test2(int a[], int izq,int der){
- int i;
- aleatorio(a,der);
- for(i=0;i<der;i++){
- printf("%d ",a[i]);
- }
- printf("\n");
- ordenarAux(a,izq,der);
- for(i=0;i<der;i++){
- printf("%d ",a[i]);
- }
- }
- int main() {
- /*
- int k;
- double t1, t2, t, x, y, z;
- int cont;
- int n;
- inicializar_semilla();
- int tamano = 500;
- int a[tamano];
- descendente(a, tamano);
- t1 = microsegundos();
- ordenacionPorInsercion(a, tamano);
- t2 = microsegundos();
- t = t2 - t1;
- if (t < 500) {
- t1 = microsegundos();
- for (k = 0; k <= 100; k++) {
- ordenacionPorInsercion(a, tamano);
- }
- t2 = microsegundos();
- t = (t2 - t1) / k;
- }
- for (cont = 1; cont <= 3; cont++) {
- for (n = 500; n <= 32000; n = n * 2) {
- inicializar_semilla();
- int b[n];
- aleatorio(b,n);
- t1 = microsegundos();
- ordenacionPorInsercion(b,n);
- t2 = microsegundos();
- t = t2 - t1;
- x = t / pow(n,1.8);
- y = t / pow(n,2);
- z = t / pow(n, 2.2);
- printf("%12d%15.3f%15.6f%15.6f%15.6f\n", n, t, x, y, z);
- }
- printf("\n");
- }
- */
- int k;
- double t1, t2, t, x, y, z;
- int cont;
- int n;
- inicializar_semilla();
- int tamano = 500;
- int a[tamano];
- aleatorio(a,tamano);
- int izq;
- int der;
- izq = a[1];
- der = a[500];
- t1 = microsegundos();
- ordenarAux(a, izq, der);
- t2 = microsegundos();
- t = t2 - t1;
- if (t < 500) {
- t1 = microsegundos();
- for (k = 0; k <= 100; k++) {
- ordenarAux(a, izq, der);
- }
- t2 = microsegundos();
- t = (t2 - t1) / k;
- }
- for (cont = 1; cont <= 3; cont++) {
- for (n = 500; n <= 32000; n = n * 2) {
- inicializar_semilla();
- int b[n];
- aleatorio(b,n);
- t1 = microsegundos();
- ordenarAux(b, izq, der);
- t2 = microsegundos();
- t = t2 - t1;
- x = t / pow(n,1.8);
- y = t / pow(n,2);
- z = t / pow(n, 2.2);
- printf("%12d%15.3f%15.6f%15.6f%15.6f\n", n, t, x, y, z);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement