Use Java to implement several common sorting algorithms (first implement org. rut. util. algorithm. sortutil)

Source: Internet
Author: User

 

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!

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.