First implement the org. rut. util. algorithm. sortutil class (which will be used for each sort in the future ):
Package Org. rut. util. algorithm; <br/> Import Org. rut. util. algorithm. support. bubblesort; <br/> Import Org. rut. util. algorithm. support. heapsort; <br/> Import Org. rut. util. algorithm. support. improvedmergesort; <br/> Import Org. rut. util. algorithm. support. improvedquicksort; <br/> Import Org. rut. util. algorithm. support. insertsort; <br/> Import Org. rut. util. algorithm. support. mergesort; <br/> Import Org. rut. util. algorithm. support. quicksort; <br/> Import Org. rut. util. algorithm. support. selectionsort; <br/> Import Org. rut. util. algorithm. support. shellsort; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class sortutil {<br/> Public final static int insert = 1; <br/> Public final static int bubble = 2; <br/> Public final static int selection = 3; <br/> Public final static int shell = 4; <br/> Public final static int quick = 5; <br/> Public final static int improved_quick = 6; <br/> Public final static int merge = 7; <br/> Public final static int improved_merge = 8; <br/> Public final static int heap = 9; <br/> Public static void sort (INT [] data) {<br/> sort (data, improved_quick); <br/>}< br/> Private Static string [] Name ={< br/> "insert ", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "Heap" <br/> }; </P> <p> Private Static sort [] impl = new sort [] {<br/> New insertsort (), <br/> New bubblesort (), <br/> New selectionsort (), <br/> New shellsort (), <br/> New quicksort (), <br/> New improvedquicksort (), <br/> New mergesort (), <br/> New improvedmergesort (), <br/> New heapsort () <br/> }; <br/> Public static string tostring (INT algorithm) {<br/> return name [algorithm-1]; <br/>}</P> <p> Public static void sort (INT [] data, int algorithm) {<br/> impl [algorithm-1]. sort (data); <br/>}< br/> Public static interface sort {<br/> Public void sort (INT [] data ); <br/>}< br/> Public static void swap (INT [] data, int I, Int J) {<br/> int temp = data [I]; <br/> data [I] = data [J]; <br/> data [J] = temp; <br/>}< br/>}
OK. Next we will start sorting;
1. Insert sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class insertsort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> int temp; <br/> for (INT I = 1; I <data. length; I ++) {<br/> for (Int J = I; (j> 0) & (data [J] <data [J-1]); j --) {<br/> sortutil. swap (data, J, J-1); <br/>}< br/>}
2. Bubble Sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class bubblesort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> int temp; <br/> for (INT I = 0; I <data. length; I ++) {<br/> for (Int J = data. length-1; j> I; j --) {<br/> If (data [J] <data [J-1]) {<br/> sortutil. swap (data, J, J-1); <br/>}< br/>}
3. Select sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class selectionsort implements sortutil. sort {<br/>/* <br/> * (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> int temp; <br/> for (INT I = 0; I <data. length; I ++) {<br/> int lowindex = I; <br/> for (Int J = data. length-1; j> I; j --) {<br/> If (data [J] <data [lowindex]) {<br/> lowindex = J; <br/>}< br/> sortutil. swap (data, I, lowindex); <br/>}< br/>}
4. Shell sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class shellsort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> for (INT I = data. length/2; I> 2; I/= 2) {<br/> for (Int J = 0; j <I; j ++) {<br/> insertsort (data, J, I); <br/>}< br/> insertsort (data, 0, 1 ); <br/>}< br/>/** <br/> * @ Param data <br/> * @ Param j <br/> * @ Param I <br/> */<br/> private void insertsort (INT [] data, int start, int Inc) {<br/> int temp; <br/> for (INT I = start + Inc; I <data. length; I + = Inc) {<br/> for (Int J = I; (j> = Inc) & (data [J] <data [J-INC]); j-= Inc) {<br/> sortutil. swap (data, J, J-Inc); <br/>}< br/>}
5. Quick sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class quicksort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> quicksort (data, 0, Data. length-1); <br/ >}< Br/> private void quicksort (INT [] data, int I, Int J) {<br/> int merge tindex = (I + J)/2; <br/> // swap <br/> sortutil. swap (data, shorttindex, J); </P> <p> int K = partition (data, I-1, J, data [J]); <br/> sortutil. swap (data, K, J); <br/> If (k-I)> 1) quicksort (data, I, k-1 ); <br/> If (J-k)> 1) quicksort (data, k + 1, J ); </P> <p >}< br/>/** <br/> * @ Param data <br/> * @ Param I <br/> * @ Param j <br/> * @ return <br/> */<br/> Private int partition (INT [] data, int L, int R, int partition) {<br/> do {<br/> while (data [++ L] <strong); <br/> while (R! = 0) & Data [-- R]> bytes); <br/> sortutil. swap (data, L, R); <br/>}< br/> while (L <R); <br/> sortutil. swap (data, L, R); <br/> return l; <br/>}< br/>}
6. Improved quick sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class improvedquicksort implements sortutil. sort {<br/> Private Static int max_stack_size = 4096; <br/> Private Static int Threshold = 10; <br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (in T []) <br/> */<br/> Public void sort (INT [] data) {<br/> int [] stack = new int [max_stack_size]; </P> <p> int Top =-1; <br/> int bottom tindex, L, R; </P> <p> stack [++ top] = 0; <br/> stack [++ top] = data. length-1; </P> <p> while (top> 0) {<br/> Int J = stack [top --]; <br/> int I = stack [top --]; </P> <p> tindex = (I + J)/2; <br/> metric = data [metric tindex]; </P> <p> sortutil. swap (data, small tindex, J); </P> <p> // partiti On <br/> L = I-1; <br/> r = J; <br/> do {<br/> while (data [++ L] <expect ); <br/> while (R! = 0) & (data [-- R]> bytes); <br/> sortutil. swap (data, L, R); <br/>}< br/> while (L <R); <br/> sortutil. swap (data, L, R); <br/> sortutil. swap (data, L, J); </P> <p> If (l-I)> threshold) {<br/> stack [++ top] = I; <br/> stack [++ top] = L-1; <br/>}< br/> If (J-l)> threshold) {<br/> stack [++ top] = L + 1; <br/> stack [++ top] = J; <br/>}</P> <p >}< br/> // new insertsort (). sort (data); <br/> insertsort (data ); <br/>}< br/>/** <br/> * @ Param data <br/> */<br/> private void insertsort (INT [] data) {<br/> int temp; <br/> for (INT I = 1; I <data. length; I ++) {<br/> for (Int J = I; (j> 0) & (data [J] <data [J-1]); j --) {<br/> sortutil. swap (data, J, J-1); <br/>}< br/>}
7. Merge Sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class mergesort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> int [] temp = new int [data. length]; <br/> mergesort (data, temp, 0, Data. length-1); <br/>}</P> <p> private void mergesort (INT [] data, int [] temp, int L, int R) {<br/> int mid = (L + r)/2; <br/> If (L = r) return; <br/> mergesort (data, temp, l, mid); <br/> mergesort (data, temp, Mid + 1, R); <br/> for (INT I = L; I <= R; I ++) {<br/> temp [I] = data [I]; <br/>}< br/> int I1 = L; <br/> int I2 = Mid + 1; <br/> for (INT cur = L; cur <= r; cur ++) {<br/> If (I1 = Mid + 1) <br/> data [cur] = temp [I2 ++]; <br/> else if (I2> r) <br/> data [cur] = temp [I1 ++]; <br/> else if (temp [I1] <temp [I2]) <br/> data [cur] = temp [I1 ++]; <br/> else <br/> data [cur] = temp [I2 ++]; <br/>}< br/>
8. Improved Merge Sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class improvedmergesort implements sortutil. sort {<br/> Private Static final int Threshold = 10; <br/>/* <br/> * (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> int [] temp = new int [data. length]; <br/> mergesort (data, temp, 0, Data. length-1); <br/>}< br/> private void mergesort (INT [] data, int [] temp, int L, int R) {<br/> int I, j, k; <br/> int mid = (L + r)/2; <br/> If (L = r) <br/> return; <br/> If (mid-l)> = threshold) <br/> mergesort (data, temp, L, mid ); <br/> else <br/> insertsort (data, L, mid-L + 1); <br/> If (R-mid)> threshold) <br/> mergesort (data, temp, Mid + 1, R); <br/> else <br/> insertsort (data, Mid + 1, R-mid ); <br/> for (I = L; I <= mid; I ++) {<br/> temp [I] = data [I]; <br/>}< br/> for (j = 1; j <= r-mid; j ++) {<br/> temp [R-J + 1] = data [J + mid]; <br/>}< br/> int A = temp [l]; <br/> int B = temp [R]; <br/> for (I = L, j = r, K = L; k <= r; k ++) {<br/> if (a <B) {<br/> data [k] = temp [I ++]; <br/> A = temp [I]; <br/>} else {<br/> data [k] = temp [j --]; <br/> B = temp [J]; <br/>}< br/>/** <br/> * @ Param data <br/> * @ Param L <br /> * @ Param I <br/> */<br/> private void insertsort (INT [] data, int start, int Len) {<br/> for (INT I = start + 1; I <start + Len; I ++) {<br/> for (Int J = I; (j> Start) & Data [J] <data [J-1]; j --) {<br/> sortutil. swap (data, J, J-1); <br/>}< br/>}
9. Heap sorting:
Package Org. rut. util. algorithm. support; <br/> Import Org. rut. util. algorithm. sortutil; <br/>/** <br/> * @ author treeroot <br/> * @ since 2006-2-2 <br/> * @ version 1.0 <br/> */<br/> public class heapsort implements sortutil. sort {<br/>/* (non-javadoc) <br/> * @ see Org. rut. util. algorithm. sortutil. sort # Sort (INT []) <br/> */<br/> Public void sort (INT [] data) {<br/> maxheap H = new maxheap (); <br/> H. init (data); <br/> for (INT I = 0; I <data. length; I ++) <br/> H. remove (); <br/> system. arraycopy (H. queue, 1, data, 0, Data. length); <br/>}< br/> Private Static class maxheap {</P> <p> void Init (INT [] data) {<br/> This. queue = new int [data. length + 1]; <br/> for (INT I = 0; I <data. length; I ++) {<br/> queue [++ size] = data [I]; <br/> fixup (size ); <br/>}</P> <p> private int size = 0; <br/> private int [] queue; </P> <p> Public int get () {<br/> return queue [1]; <br/>}< br/> Public void remove () {<br/> sortutil. swap (queue, 1, size --); <br/> fixdown (1 ); <br/>}< br/> // fixdown <br/> private void fixdown (int K) {<br/> Int J; <br/> while (j = k <1) <= size) {<br/> If (j <size & queue [J] <queue [J + 1]) <br/> J ++; <br/> If (queue [k]> queue [J]) // do not need to exchange <br/> break; <br/> sortutil. swap (queue, j, k); <br/> K = J; <br/>}< br/> private void fixup (int K) {<br/> while (k> 1) {<br/> Int J = k> 1; <br/> If (queue [J]> queue [k]) <br/> break; <br/> sortutil. swap (queue, j, k); <br/> K = J; <br/>}< br/>}
If you still have a good sorting method, leave a message and let us know. Thank you!