排序算法(冒泡、选择、插入、希尔、快排、归并)
package cn. kales. algorithm. test. test01;
public class Sort {
public void BubbleSort ( int [ ] A) {
int len = A. length;
for ( int i = 0 ; i< len; i++ ) {
int flag = 0 ;
for ( int j = 0 ; j< len- i- 1 ; j++ ) {
int temp;
if ( A[ j] > A[ j+ 1 ] ) {
temp = A[ j+ 1 ] ;
A[ j+ 1 ] = A[ j] ;
A[ j] = temp;
flag = 1 ;
}
}
if ( flag == 0 ) {
break ;
}
}
}
public void SelectSort ( int [ ] A) {
for ( int i = 0 ; i< A. length- 1 ; i++ ) {
int minIndex = i;
for ( int j = i+ 1 ; j< A. length; j++ ) {
if ( A[ j] < A[ minIndex] ) {
minIndex = j;
}
}
if ( minIndex != i) {
int temp;
temp = A[ i] ;
A[ i] = A[ minIndex] ;
A[ minIndex] = temp;
}
}
}
public void InsertSort ( int [ ] A) {
int len = A. length;
for ( int i = 1 ; i< len; i++ ) {
for ( int j = i- 1 ; j>= 0 ; j-- ) {
if ( A[ i] < A[ j] ) {
int temp;
temp = A[ i] ;
A[ i] = A[ j] ;
A[ j] = temp;
}
}
}
}
public void ShellSort ( int [ ] A) {
int len = A. length;
for ( int gap = len/ 2 ; gap> 0 ; gap/= 2 ) {
for ( int i = gap; i< len; i++ ) {
while ( i- gap >= 0 && A[ i] < A[ i- gap] ) {
int temp = A[ i] ;
A[ i] = A[ i- gap] ;
A[ i- gap] = temp;
}
}
}
}
public void QuickSort ( int [ ] arr, int left, int right) {
int key = arr[ left] ;
int i = left;
int j = right;
while ( i< j) {
while ( i< j && arr[ j] >= key) j-- ;
if ( i< j) {
arr[ i] = arr[ j] ;
i++ ;
}
while ( i< j && arr[ i] <= key) i++ ;
if ( i< j) {
arr[ j] = arr[ i] ;
j-- ;
}
}
arr[ i] = key;
QuickSort ( arr, left, i- 1 ) ;
QuickSort ( arr, i+ 1 , right) ;
}
public void MergeSort ( int [ ] arr , int left, int right, int [ ] temp) {
if ( left< right) {
int mid = ( left+ right) / 2 ;
MergeSort ( arr, left, mid, temp) ;
MergeSort ( arr, mid+ 1 , right, temp) ;
merge ( arr, left, mid, right, temp) ;
}
}
public void merge ( int [ ] arr, int left, int mid, int right, int [ ] temp) {
int i = left;
int j = mid+ 1 ;
int t = 0 ;
while ( i<= mid && j<= right) {
if ( arr[ i] <= arr[ j] )
temp[ t++ ] = arr[ i++ ] ;
else
temp[ t++ ] = arr[ j++ ] ;
}
while ( i<= mid) temp[ t++ ] = arr[ i++ ] ;
while ( j<= right) temp[ t++ ] = arr[ j++ ] ;
for ( int start = 0 ; start < temp. length; start++ ) {
arr[ left++ ] = temp[ start] ;
}
}
}