温故而知新---总结常用排序算法(持续更新)

冒泡排序

基本思想:

大的数一点一点推到后面,最终形成排序

代码:

 1 /**
 2  * 冒泡排序
 3  * @author wxh
 4  * @version 1.0
 5  *
 6  */
 7 public class Demo1 {
 8 
 9     public static void main(String[] args) {
10 int[] data = {9,2,7,19,100,97,63,208,55,78}; 11 int[] b = bubbleSort( data ); 12 System.out.println( Arrays.toString( b ) );
13 } 14 15 public static int[] bubbleSort( int[] data ) { 16 int temp = 0; 17 int n = data.length; 18 for( int i = 0; i < n; i++ ) { 19 for( int j = i + 1; j < n; j++ ) { 20 if( data[i] > data[j] ) { 21 temp = data[i]; 22 data[i] = data[j]; 23 data[j] = temp; 24 } 25 } 26 } 27 return data; 28 } 29 30 }

选择排序

基本思想:

每一次遍历都找出最小值,然后把这个值放到前面(跟冒泡相反,冒泡是找出最大值然后放到后面)

代码:

 1 /**
 2  * 选择排序
 3  * @author wxh
 4  * @version 1.0
 5  *
 6  */
 7 public class Demo2 {
 8     
 9     public static void main(String[] args) {
10         
11         int[] data = {9,2,7,19,100,97,63,208,55,78};
12         int[] d = sort( data );
13         System.out.println( Arrays.toString( d ) );
14         
15     }
16 
17     private static int[] sort( int[] data ) {
18         
19         int temp = 0;
20         for( int i = 0; i < data.length; i++ ) {
21             int min = i; 
22             for( int j = i + 1; j < data.length; j++ ) {
23                 if( data[j] < data[min] ) {  //如果有小于当前最小值的数值
24                     min = j; //将此关键字的下标赋值给min
25                 }
26             }
27             if( min != i ) {
28                 temp = data[i];
29                 data[i] = data[min];
30                 data[min] = temp;
31             }
32         }
33         return data;
34     }
35     
36 }

插入排序

基本思想:

就是把当前未排序的元素插入到一个新的排序列表中。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2)。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。

代码:

 1 /**
 2  * 插入排序
 3  * @author wxh
 4  * @version 1.0
 5  *
 6  */
 7 public class Demo3 {
 8     
 9     public static void main(String[] args) {
10         
11         int[] data = {9,2,7,19,100,97,63,208,55,78};
12         int[] d = sort( data );
13         System.out.println( Arrays.toString( d ) );
14         
15     }
16 
17     private static int[] sort( int[] data ) {
18         int n = data.length;
19         for( int i = 1; i < n; i++ ) { 
20             int flag = i; //要比较的位置
21             for( int j = i - 1; j >= 0; j-- ) {
22                 if( data[j] > data[flag] ) { 
23                     int temp = data[j];
24                     data[j] = data[flag];
25                     data[flag] = temp;
26                     flag--; //继续向前比较
27                 }
28             }
29         }
30         
31         return data;
32     }
33     
34 }

快速排序

基本思想:

代码:

 1 /**
 2  * 快速排序
 3  * @author wxh
 4  * @version 1.0
 5  * 
 6  */
 7 public class Demo4 {
 8     
 9     private static final int[] data = {9,2,7,19,100,97,63,208,55,78};
10     
11     public static void main(String[] args) {
12         int[] d = sort( 0, data.length-1 );//传入数组第一个元素和最后一个元素
13         System.out.println( Arrays.toString( d ) );    
14     }
15     
16     public static int[] sort( int low, int high ) {
17         if ( low < high ) {  
18             int result = partition( low, high );  
19             sort( low, result - 1 );  
20             sort( result + 1, high );  
21         }  
22         return data;  
23     }
24 
25     private static int partition( int low, int high ) {  
26         int key = data[low];  
27         while ( low < high ) {  
28             while ( low < high && data[high] >= key )  
29                 high--;  
30             data[low] = data[high];  
31             while ( low < high && data[low] <= key )  
32                 low++;  
33             data[high] = data[low];  
34         }  
35         data[low] = key;  
36         return low;  
37     }  
38     
39 }
View Code

归并排序

基本思想:

代码:

原文地址:https://www.cnblogs.com/dahao1020/p/5236503.html