QuickSort e métodos static

Pessoal eu to trabalhando pela primeira vez com quicksort no java. Porem esta dando erro static no meu programa. Gostaria de saber como corrigir este problema!

import java.util.*;
public class desafio{
public static void main(String args[]){
   
    int vet[] = {157,457,12,10000,86,251,0,869,1};
    int v1[] = new int[4];
    int v2[] = new int[4];
    int na =0, n =0, i=0;
    int maior =0, pos=0;
    
    
    /*Instrução para colocar os numeros*/
    
    /*Instrução para achar o maior numero e sua posição dentro do vetor*/
    for( i=0; i<9; i++){
      if(vet[i]> maior)
          maior = vet[i];
          pos = i;
    }
    System.out.print(" O maior numero do vetor de nove posicoes e: " + maior + "\n");
    
   
  /**/  
  for(int h=0; h <vet.length;h++){ 
       System.out.println(vet[h]); 
       } 

  for(int j=0; j<4; j++){
   v1[j]=vet[j];
   System.out.print(" "+v1[j]);
  }  
  
 
  for(int d=0; d<4;d++){
  v2[d]=vet[d+5];
  System.out.print(" "+v2[d]);
  }  
    quick(0,v1.length - 1, v1);
    System.exit(0);
  }

public void quick(int p, int q, int a[]){
 if(p<q){
 int x = part(p,q, a);
 quick(p, x-1, a);
 quick(x + 1, q, a);
 }
}

public int part(int p, int q, int a[]){
 int j = p -1;
 int aux =a[q];
  for(int i=p; i<=q; i++){
    if(a[i]<= aux)
        troca(a, i, ++j);
  }
 return j;

}

public void troca(int a[], int x, int y){
 int aux = a[x];
 a[x]=a[y];
 a[y]=aux;
}

}

O erro é:
non-static method quick(int,int,int[]) cannot be referenced from a static context quick(0,v1.length - 1, v1);

To usando a ferramenta NetBeans para o tranpo…
Isso não é erro de lógica,Correto?

Isso é trabalho de faculdade…!!
antes de busca informações é importante que você de uma verificada no
google e tem muitos tutorias na net que fala sobre métodos static e só vc correr atras…!

não é para faculdade, e sim para preparação de maratona… to estudando sozinho por enquanto…enquanto eu engatinho…

Gollun, o algorítmo padrão de ordenação dos metodos sort da classe java.util.Arrays é o quicksort. Lembrando, nós temos acesso às API`s portanto, podemos estudar como os métodos foram criados. Vou colar abaixo o código do sort que pede como parametro um int. Mas sugiro que vc de uma olhada no código da API.

Abraço,

[code]
/**
* Sorts the specified sub-array of integers into ascending order.
*/
private static void sort1(int x[], int off, int len) {
// Insertion sort on smallest arrays
if (len &lt 7) {
for (int i=off; i<len+off; i++)
for (int j=i; j>off && x[j-1]&gtx[j]; j–)
swap(x, j, j-1);
return;
}

// Choose a partition element, v
int m = off + (len &gt&gt 1);       // Small arrays, middle element
if (len &gt 7) {
    int l = off;
    int n = off + len - 1;
    if (len &gt 40) {        // Big arrays, pseudomedian of 9
	int s = len/8;
	l = med3(x, l,     l+s, l+2*s);
	m = med3(x, m-s,   m,   m+s);
	n = med3(x, n-2*s, n-s, n);
    }
    m = med3(x, l, m, n); // Mid-size, med of 3
}
int v = x[m];

// Establish Invariant: v* (<v)* (>v)* v*
int a = off, b = a, c = off + len - 1, d = c;
while(true) {
    while (b &lt= c && x[b] &lt= v) {
	if (x[b] == v)
	    swap(x, a++, b);
	b++;
    }
    while (c &gt= b && x[c] &gt= v) {
	if (x[c] == v)
	    swap(x, c, d--);
	c--;
    }
    if (b &gt c)
	break;
    swap(x, b++, c--);
}

// Swap partition elements back to middle
int s, n = off + len;
s = Math.min(a-off, b-a  );  vecswap(x, off, b-s, s);
s = Math.min(d-c,   n-d-1);  vecswap(x, b,   n-s, s);

// Recursively sort non-partition-elements
if ((s = b-a) &gt 1)
    sort1(x, off, s);
if ((s = d-c) &gt 1)
    sort1(x, n-s, s);
}


/**
 * Swaps x[a] with x[b].
 */
private static void swap(int x[], int a, int b) {
int t = x[a];
x[a] = x[b];
x[b] = t;
}

/**
 * Returns the index of the median of the three indexed integers.
 */
private static int med3(int x[], int a, int b, int c) {
return (x[a] &lt x[b] ?
	(x[b] &lt x[c] ? b : x[a] &lt x[c] ? c : a) :
	(x[b] &gt x[c] ? b : x[a] &gt x[c] ? c : a));
}


/**
 * Swaps x[a .. (a+n-1)] with x[b .. (b+n-1)].
 */
private static void vecswap(int x[], int a, int b, int n) {
for (int i=0; i<n; i++, a++, b++)
    swap(x, a, b);
}

[/code]>

Isso é um problema de OO.

Veja, seu método main é
public static void main(String args[])
E seu método quick é apenas
public void quick(int p, int q, int a[])

Sempre que você está dentro de um método static todos os métodos que você for chamar devem ser static também ou então você precisa instanciar um objeto e chamar o método desse objeto. Ou seja, a solução fácil é mudar a assinatura de todos os seus métodos para static, porém em circustâncias diferentes de estar apenas estudando um algoritmo eu recomendaria que instanciasse um objeto.