三大基本排序(冒泡,选择,插入)
前言
本人小白一枚,往后定期更新,还请各位大佬多多指教.所提交代码,均是本人亲测. 所写类在文章的最后 方法elapsedTime()是单元测试Junit方法,使用方法注解已标明
方法介绍
public int [ ] autoArray ( ) {
int [ ] arr = new int [ 10 ] ;
for ( int i = 0 ; i < arr. length; i++ ) {
arr[ i] = ( int ) ( Math. random ( ) * 100 + 1 ) ;
}
System. out. println ( "当前自动生成的数组==>" + Arrays. toString ( arr) + "\n" ) ;
return arr;
}
public void swap ( int a, int b, int [ ] arr) {
arr[ a] = arr[ a] ^ arr[ b] ;
arr[ b] = arr[ a] ^ arr[ b] ;
arr[ a] = arr[ a] ^ arr[ b] ;
}
@Test
public void elapsedTime ( ) {
long start = System. currentTimeMillis ( ) ;
insertSort ( ) ;
long end = System. currentTimeMillis ( ) ;
System. out. println ( "当前方法执行所花费时间==>" + ( end - start) + "毫秒" ) ;
}
public void bubbleSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = arr. length - 1 ; i > 0 ; i-- ) {
System. out. println ( "开始内循环" ) ;
for ( int j = 0 ; j < i; j++ ) {
if ( arr[ j] > arr[ j + 1 ] ) {
swap ( j, j+ 1 , arr) ;
System. out. println ( "互换后的数组==>" + Arrays. toString ( arr) ) ;
}
}
System. out. println ( "本次内循环结束" + "\n" ) ;
}
}
public void selectionSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System. out. println ( "内循环 i 索引==>" + i) ;
int numIndex = i;
for ( int j = i + 1 ; j < arr. length; j++ ) {
if ( arr[ j] < arr[ i] && arr[ i] != arr[ j] ) {
numIndex = j;
swap ( i, numIndex, arr) ;
System. out. println ( "互换后的数组==>" + Arrays. toString ( arr) ) ;
}
}
System. out. println ( "本次内循环结束" + "\n" ) ;
}
}
public void insertSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = 1 ; i < arr. length; i++ ) {
System. out. println ( "内循环 i 索引==>" + i) ;
if ( arr[ i] < arr[ i - 1 ] ) {
int num = arr[ i] ;
int j = i;
while ( j > 0 && num < arr[ j - 1 ] ) {
arr[ j] = arr[ j - 1 ] ;
System. out. println ( "while循环填充后的数组==>" + Arrays. toString ( arr) ) ;
j-- ;
}
arr[ j] = num;
}
System. out. println ( "本次外循环结束的数组==>" + Arrays. toString ( arr) + "\n" ) ;
}
System. out. println ( "最后后的数组==>" + Arrays. toString ( arr) ) ;
}
所写类
package csdn. algorithm;
import org. junit. Test;
import java. util. Arrays;
public class algorithm {
public int [ ] autoArray ( ) {
int [ ] arr = new int [ 10 ] ;
for ( int i = 0 ; i < arr. length; i++ ) {
arr[ i] = ( int ) ( Math. random ( ) * 100 + 1 ) ;
}
System. out. println ( "当前自动生成的数组==>" + Arrays. toString ( arr) + "\n" ) ;
return arr;
}
public void swap ( int a, int b, int [ ] arr) {
arr[ a] = arr[ a] ^ arr[ b] ;
arr[ b] = arr[ a] ^ arr[ b] ;
arr[ a] = arr[ a] ^ arr[ b] ;
}
@Test
public void elapsedTime ( ) {
long start = System. currentTimeMillis ( ) ;
insertSort ( ) ;
long end = System. currentTimeMillis ( ) ;
System. out. println ( "当前方法执行所花费时间==>" + ( end - start) + "毫秒" ) ;
}
public void bubbleSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = arr. length - 1 ; i > 0 ; i-- ) {
System. out. println ( "开始内循环" ) ;
for ( int j = 0 ; j < i; j++ ) {
if ( arr[ j] > arr[ j + 1 ] ) {
swap ( j, j+ 1 , arr) ;
System. out. println ( "互换后的数组==>" + Arrays. toString ( arr) ) ;
}
}
System. out. println ( "本次内循环结束" + "\n" ) ;
}
}
public void selectionSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System. out. println ( "内循环 i 索引==>" + i) ;
int numIndex = i;
for ( int j = i + 1 ; j < arr. length; j++ ) {
if ( arr[ j] < arr[ i] && arr[ i] != arr[ j] ) {
numIndex = j;
swap ( i, numIndex, arr) ;
System. out. println ( "互换后的数组==>" + Arrays. toString ( arr) ) ;
}
}
System. out. println ( "本次内循环结束" + "\n" ) ;
}
}
public void insertSort ( ) {
int [ ] arr = autoArray ( ) ;
for ( int i = 1 ; i < arr. length; i++ ) {
System. out. println ( "内循环 i 索引==>" + i) ;
if ( arr[ i] < arr[ i - 1 ] ) {
int num = arr[ i] ;
int j = i;
while ( j > 0 && num < arr[ j - 1 ] ) {
arr[ j] = arr[ j - 1 ] ;
System. out. println ( "while循环填充后的数组==>" + Arrays. toString ( arr) ) ;
j-- ;
}
arr[ j] = num;
}
System. out. println ( "本次外循环结束的数组==>" + Arrays. toString ( arr) + "\n" ) ;
}
System. out. println ( "最后后的数组==>" + Arrays. toString ( arr) ) ;
}
}