static int spec_enhance_SHS (double a[], long n) { if (n < 2) { return 0; } autoNUMvector<long> posmax (1, (n + 1) / 2); long nmax = 0; if (a[1] > a[2]) { posmax[++nmax] = 1; } for (long i = 2; i <= n - 1; i++) if (a[i] > a[i - 1] && a[i] >= a[i + 1]) { posmax[++nmax] = i; } if (a[n] > a[n - 1]) { posmax[++nmax] = n; } if (nmax == 1) { for (long j = 1; j <= posmax[1] - 3; j++) { a[j] = 0; } for (long j = posmax[1] + 3; j <= n; j++) { a[j] = 0; } } else { for (long i = 2; i <= nmax; i++) { for (long j = posmax[i - 1] + 3; j <= posmax[i] - 3; j++) { a[j] = 0; } } } return 1; }
void ordenar2(int value, int data[]) { int temp, maximo, minimo, valin, valfn, posmx, posmn; //guardamos los valores del maximo y minimo maximo = max(value, data); minimo = min(value, data); //guardamos las posiciones en las que se encuentran el max y min posmx = posmax(maximo, value, data); posmn = posmin(minimo, value, data); //guardamos los valores que se encuentran en //la 1era y ultima posicion actualmente para //situarlos en las posiciones de las que van //a salir el min y max, siempre que el min //o max no esten ya situados alli if(data[0] != minimo) { valin = data[0]; //posicionamos el valor del [inicio] data[posmn] = valin; } if(data[value-1] != maximo) { valfn = data[value - 1]; //posicionamos el valor del [final] data[posmx] = valfn; } //posicionamos al max y min data[value - 1] = maximo; data[0] = minimo; //i va de 1 al numero de elementos del arreglo for(int i = 1; i < value; i++) //j va de 1 al numero de elementos del arreglo menos i for(int j = 1; j < (value-1) - i; j++)//definicion de n y n + 1 //si el valor mayor esta a la izquierda este cambia de posicion, //y tomara la posicion del valor con el que se lo comparo //previamente y es la unica condicion para que se ejecute if(data[j] > data[j + 1]) { //utilizamos una variable auxiliar para realizar //el cambio de posiciones temp = data[j]; // t = d data[j] = data[j + 1]; // d = d1 //los valores se intercambian data[j + 1] = temp; // d1 = t } }//void ordenar2(int, int[])