Algoritmos de ordenação
Veja nesta dica quatro algoritmos de ordenação (Insertion Sort, Heap Sort, Merge Sort e Shell Sort)
Algoritmos de ordenação
Veja nesta dica quatro algoritmos de ordenação (Insertion Sort, Heap Sort, Merge Sort e Shell Sort)
1. Implementação do algoritmo Insertion Sort
<SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Algoritmo Insertion Sort.</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >insertionSort( Comparable [ ] a )</SPAN><SPAN lang=EN-US >{</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >p = </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; p < a.length; p++ )</SPAN><SPAN lang=EN-US >{</SPAN><SPAN lang=EN-US >Comparable tmp = a[ p ];</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = p;</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( ; j > </SPAN><SPAN lang=EN-US >0 </SPAN><SPAN lang=EN-US >&& tmp.compareTo( a[ j - </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >] ) < </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; j-- )</SPAN><SPAN lang=EN-US >a[ j ] = a[ j - </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >];</SPAN><SPAN lang=EN-US >a[ j ] = tmp;</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >}</SPAN>
2. Implementação do algoritmo Heap Sort
<SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Algoritmo Heap Sort.</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >heapsort( Comparable [ ] a )</SPAN><SPAN lang=EN-US >{</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = a.length / </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >; i >= </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; i-- ) </SPAN><SPAN lang=EN-US >/* buildHeap */</SPAN><SPAN lang=EN-US >percDown( a, i, a.length );</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = a.length - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >; i > </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; i-- )</SPAN><SPAN lang=EN-US >{</SPAN><SPAN lang=EN-US >swapReferences( a, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >, i ); </SPAN><SPAN lang=EN-US >/* deleteMax */</SPAN><SPAN lang=EN-US >percDown( a, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >, i );</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >}</SPAN><B><SPAN lang=EN-US >private static int </SPAN></B><SPAN lang=EN-US >leftChild( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i )</SPAN><SPAN lang=EN-US >{</SPAN><B><SPAN lang=EN-US >return </SPAN></B><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >* i + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN><SPAN lang=EN-US >}</SPAN><B><SPAN lang=EN-US >private static void </SPAN></B><SPAN lang=EN-US >percDown( Comparable [ ] a, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >n )</SPAN><SPAN lang=EN-US >{</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >child;</SPAN><SPAN lang=EN-US >Comparable tmp;</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( tmp = a[ i ]; leftChild( i ) < n; i = child )</SPAN><SPAN lang=EN-US >{</SPAN><SPAN lang=EN-US >child = leftChild( i );</SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >( child != n - </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >&& a[ child ].compareTo( a[ child + </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >] ) < </SPAN><SPAN lang=EN-US >0 </SPAN><SPAN lang=EN-US >)</SPAN><SPAN lang=EN-US >child++;</SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >( tmp.compareTo( a[ child ] ) < </SPAN><SPAN lang=EN-US >0 </SPAN><SPAN lang=EN-US >)</SPAN><SPAN lang=EN-US >a[ i ] = a[ child ];</SPAN><B><SPAN lang=EN-US >else</SPAN></B><B><SPAN lang=EN-US >break</SPAN></B><SPAN lang=EN-US >;</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >a[ i ] = tmp;</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Method para trocar elementos em um array.</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >public static final void </SPAN></B><SPAN lang=EN-US >swapReferences( Object [ ] a, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >index1, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >index2 )</SPAN><SPAN lang=EN-US >{</SPAN><SPAN lang=EN-US >Object tmp = a[ index1 ];</SPAN><SPAN lang=EN-US >a[ index1 ] = a[ index2 ];</SPAN><SPAN lang=EN-US >a[ index2 ] = tmp;</SPAN><SPAN lang=EN-US >}</SPAN>
3. Implementação do algoritmo Merge Sort
<SPAN >/**</SPAN><SPAN >* Algoritmo Merge Sort.</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >mergeSort( Comparable [ ] a ) {</SPAN><SPAN lang=EN-US >Comparable [ ] tmpArray = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Comparable[ a.length ];</SPAN><SPAN lang=EN-US >mergeSort( a, tmpArray, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >, a.length - </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >);</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Método interno que faz chamadas recursivas</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >private static void </SPAN></B><SPAN lang=EN-US >mergeSort( Comparable [ ] a, Comparable [ ] tmpArray,</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >left, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >right ) {</SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >( left < right ) {</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >center = ( left + right ) / </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >;</SPAN><SPAN lang=EN-US >mergeSort( a, tmpArray, left, center );</SPAN><SPAN lang=EN-US >mergeSort( a, tmpArray, center + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >, right );</SPAN><SPAN lang=EN-US >merge( a, tmpArray, left, center + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >, right );</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Metódo interno que ordena duas partes de um subarray.</SPAN><SPAN lang=EN-US >*/</SPAN><B><SPAN lang=EN-US >private static void </SPAN></B><SPAN lang=EN-US >merge( Comparable [ ] a, Comparable [ ] tmpArray,</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >leftPos, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >rightPos, </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >rightEnd ) {</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >leftEnd = rightPos - </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >tmpPos = leftPos;</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >numElements = rightEnd - leftPos + </SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >;</SPAN><SPAN lang=EN-US >// loop principal</SPAN><B><SPAN lang=EN-US >while</SPAN></B><SPAN lang=EN-US >( leftPos <= leftEnd && rightPos <= rightEnd )</SPAN><B><SPAN lang=EN-US >if</SPAN></B><SPAN lang=EN-US >( a[ leftPos ].compareTo( a[ rightPos ] ) <= </SPAN><SPAN lang=EN-US >0 </SPAN><SPAN lang=EN-US >)</SPAN><SPAN lang=EN-US >tmpArray[ tmpPos++ ] = a[ leftPos++ ];</SPAN><B><SPAN lang=EN-US >else</SPAN></B><SPAN lang=EN-US >tmpArray[ tmpPos++ ] = a[ rightPos++ ];</SPAN><B><SPAN lang=EN-US >while</SPAN></B><SPAN lang=EN-US >( leftPos <= leftEnd ) </SPAN> <SPAN lang=EN-US >tmpArray[ tmpPos++ ] = a[ leftPos++ ];</SPAN><B><SPAN lang=EN-US >while</SPAN></B><SPAN lang=EN-US >( rightPos <= rightEnd ) </SPAN> <SPAN lang=EN-US >tmpArray[ tmpPos++ ] = a[ rightPos++ ];</SPAN><SPAN lang=EN-US >// Copiando o array temporário de volta</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; i < numElements; i++, rightEnd-- )</SPAN><SPAN lang=EN-US >a[ rightEnd ] = tmpArray[ rightEnd ];</SPAN><SPAN lang=EN-US >}</SPAN>
4. Implementação do algoritmo Shell Sort
<SPAN lang=EN-US >/**</SPAN><SPAN lang=EN-US >* Algoritmo Shell Sort.</SPAN><SPAN lang=EN-US >*/</SPAN>
<B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >shellsort( Comparable [ ] a )</SPAN><SPAN lang=EN-US >{</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >gap = a.length / </SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >; gap > </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN><SPAN lang=EN-US >gap = gap == </SPAN><SPAN lang=EN-US >2 </SPAN><SPAN lang=EN-US >? </SPAN><SPAN lang=EN-US >1 </SPAN><SPAN lang=EN-US >: (</SPAN><B><SPAN lang=EN-US >int</SPAN></B><SPAN lang=EN-US >) ( gap / </SPAN><SPAN lang=EN-US >2.2 </SPAN><SPAN lang=EN-US >) )</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( </SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >i = gap; i < a.length; i++ )</SPAN><SPAN lang=EN-US >{</SPAN><SPAN lang=EN-US >Comparable tmp = a[ i ];</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j = i;</SPAN><B><SPAN lang=EN-US >for</SPAN></B><SPAN lang=EN-US >( ; j >= gap && tmp.compareTo( a[ j - gap ] ) < </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; j -= gap )</SPAN><SPAN lang=EN-US >a[ j ] = a[ j - gap ];</SPAN><SPAN lang=EN-US >a[ j ] = tmp;</SPAN><SPAN lang=EN-US >}</SPAN><SPAN lang=EN-US >}</SPAN>
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo