zoukankan      html  css  js  c++  java
  • 温故而知新---总结常用排序算法(持续更新)

    冒泡排序

    基本思想:

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

    代码:

     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

    归并排序

    基本思想:

    代码:

  • 相关阅读:
    Java Volatile keyword
    解决 The &#39;InnoDB&#39; feature is disabled; you need MySQL built with &#39;InnoDB&#39; to have it working
    【玩转cocos2d-x之三十九】Cocos2d-x 3.0截屏功能集成
    【DP】UVA 624 CD 记录路径
    ns3加入模块之vanet-highway
    awk向脚本传递參数(二)
    【传递正能量】献给默默追梦的人
    算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
    Webstorm/IntelliJ Idea 过期破解方法
    CenterOS下安装NodeJS
  • 原文地址:https://www.cnblogs.com/dahao1020/p/5236503.html
Copyright © 2011-2022 走看看