1.冒泡排序
public class MaoPao {
public static void main ( String [ ] args) {
MaoPao m = new MaoPao ( ) ;
int [ ] a = new int [ 10000 ] ;
for ( int i = 0 ; i < 10000 ; i++ ) {
a[ i] = ( int ) ( Math . random ( ) * 1000 ) ;
}
for ( int i = 0 ; i < 10 ; i++ ) {
System . out. println ( m. maoPao1 ( a) - m. maoPao2 ( a) ) ;
System . out. println ( "--------" ) ;
}
}
public long maoPao1 ( int [ ] nums) {
long start = System . nanoTime ( ) ;
for ( int i = 0 ; i < nums. length; i++ ) {
for ( int j = 1 ; j < nums. length; j++ ) {
if ( nums[ j] < nums[ j - 1 ] ) {
int temp = nums[ j] ;
nums[ j] = nums[ j - 1 ] ;
nums[ j - 1 ] = temp;
}
}
}
long end = System . nanoTime ( ) ;
return end - start;
}
public Long maoPao2 ( int [ ] nums) {
long start = System . nanoTime ( ) ;
for ( int i = 0 ; i < nums. length; i++ ) {
for ( int j = 1 ; j < nums. length/ 2 ; j++ ) {
if ( nums[ j] < nums[ j- 1 ] ) {
int temp = nums[ j] ;
nums[ j] = nums[ j- 1 ] ;
nums[ j- 1 ] = temp;
}
}
for ( int m = nums. length- 1 ; m > nums. length/ 2 ; m-- ) {
if ( nums[ m] < nums[ m- 1 ] ) {
int temp = nums[ m] ;
nums[ m] = nums[ m- 1 ] ;
nums[ m- 1 ] = temp;
}
}
}
long end = System . nanoTime ( ) ;
return end - start;
}
}
222203299
-- -- -- --
189292499
-- -- -- --
38624699
-- -- -- --
2.选择排序
每次循环找到最小值(最大值),与外层边界数据进行交换。
public int [ ] select2 ( int [ ] nums) {
for ( int i = 0 ; i < nums. length; i++ ) {
int min = i;
for ( int j = i+ 1 ; j < nums. length; j++ ) {
if ( nums[ j] < nums[ min] )
min = j;
}
int temp = nums[ min] ;
nums[ min] = nums[ i] ;
nums[ i] = temp;
}
return nums;
}
public void betterSelectSort ( int [ ] arr) {
int left, right, temp;
left = 0 ;
right = arr. length - 1 ;
int min;
int max;
int index = 0 ;
while ( left < right) {
min = left;
max = right;
for ( int i= left; i<= right; i++ ) {
if ( arr[ i] <= arr[ min] ) {
min = i;
}
if ( arr[ i] >= arr[ max] ) {
max = i;
}
}
index++ ;
if ( min == left && max == right) {
System . out. println ( "第" + index + "轮循环没有找到最值,无需交换" ) ;
} else if ( min == right && max == left) {
temp = arr[ left] ;
arr[ left] = arr[ min] ;
arr[ min] = temp;
} else {
int minTemp = arr[ min] ;
int maxTemp = arr[ max] ;
temp = arr[ left] ;
arr[ left] = minTemp;
arr[ min] = temp;
if ( max == left) {
max = min;
}
temp = arr[ right] ;
arr[ right] = maxTemp;
arr[ max] = temp;
}
left++ ; right-- ;
}
}
3.插入排序
第一层循环的 元素,通过第二层循环,与它自身之前的数据进行比较后互换
public class Insert {
public static void main ( String [ ] args) {
Insert i = new Insert ( ) ;
int [ ] a = new int [ 10 ] ;
for ( int j = 0 ; j < 10 ; j++ ) {
int x = ( int ) ( Math . random ( ) * 10 ) ;
a[ j] = x;
}
i. insert ( a) ;
System . out. println ( Arrays . toString ( a) ) ;
}
public void insert ( int [ ] nums) {
for ( int i = 1 ; i < nums. length; i++ ) {
for ( int j = i; j > 0 ; j-- ) {
if ( nums[ j] < nums[ j- 1 ] ) {
int temp = nums[ j] ;
nums[ j] = nums[ j- 1 ] ;
nums[ j- 1 ] = temp;
}
}
}
}
}