Insertion Sort - Part 1 HackerRank - Solución C++

Publicado el 13 marzo 2015 por Francves


Acá la solución implementada en C++ del desafío "Insertion Sort - Part 1" de HackerRank.
Conoce que son los desafíos de HackerRanks

Mira nuestro primer desafío en HackerRank
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
void insertionSort(vector <int> ar) {
int ultimo, h = 2;
bool chequeador = false; // Esta sera true si el elemento ultimo ha encontrado su lugar
//ultimo = *min_element(ar.begin(), ar.end());
ultimo = ar[ar.size() - 1];
for(unsigned int j = 0; j <= ar.size()-1; j++){
if(h > ar.size()){ // para que pueda remplazar el ultimo elemento en la posicion 0 del vector
ar[0] = ultimo;
}
else{ // sino operacion normal de reemplazo
if(ar[ar.size()-h]>ultimo){ // si dicho elemento es mayor a ultimo entnces procede a copiarse en la siguiente celda del vector
ar[ar.size()-h+1] = ar[ar.size()-h];
h++; //variable controladora
}
else{//ocurre si el valor de ultimo es mayor o igual al del elemento que se esta comparando
ar[ar.size()-h+1] = ultimo; //cuando ultimo encuentra su posicion la toma
chequeador = true; // Si el elemento ultimo ha encontrado su lugar esta variable toma el valor true para luego en un if hacer un break
}
}
for(unsigned int i = 0; i < ar.size(); i++){
cout << ar[i] << " ";
}
cout << endl;
if(chequeador)
break;// ayuda a que no se impriman lineas de mas...
}
}
int main(void) {
vector <int> _ar;
int _ar_size;
cin >> _ar_size;
for(int _ar_i=0; _ar_i<_ar_size; _ar_i++) {
int _ar_tmp;
cin >> _ar_tmp;
_ar.push_back(_ar_tmp);
}
insertionSort(_ar);
return 0;
}

Enlace del desafío:
https://www.hackerrank.com/challenges/insertionsort1
Sí desean proponer otras soluciones no duden en colocarlas en los comentarios.
También te podría interesar:
  1. Operador xor binario en c++ - Disyunción exclusiva de dos números decimales
  2. Determinar si una palabra es palíndromo C++
  3. 4 Ejercicios Básicos de Programación Orientada a Objetos en c++
  4. Matriz de accesibilidad de un Digrafo en c++