private static LimiteParticoes particao(Item[] v, int esq, int dir) { LimiteParticoes p = new LimiteParticoes(); p.i = esq; p.j = dir; Item x = v[(p.i + p.j) / 2]; //obter o pivô x do { while (x.Compara(v[p.i]) > 0) { p.i++; } while (x.Compara(v[p.j]) < 0) { p.j--; } if (p.i <= p.j) { Item w = v[p.i]; v[p.i] = v[p.j]; v[p.j] = w; p.i++; p.j--; } } while (p.i <= p.j); return(p); }
/// <summary> /// Método de ordenar do QuickSort /// </summary> private static void Ordena(Item[] v, int esq, int dir) { LimiteParticoes p = particao(v, esq, dir); if (esq < p.j) { Ordena(v, esq, p.j); } if (p.i < dir) { Ordena(v, p.i, dir); } }