• 数组的几种排序算法的实现


    转自: http://blog.csdn.net/letthinking/article/details/6764996 .

    数组的排序方法有很多,效率也各不相同,下面简单介绍一下几种常见的排序算法。

          1.选择排序法:将要排序的数组分成两部分,一部分是从大到小已经排好序的,一部分是无序的,从无序的部分取出最小的放到已经排序的最后面。实现如下:

    [java] view plaincopy
     
    1. public int[] choiceSort(int[] arr){  
    2.         for(int i = 0;i < arr.length;i++){  
    3.             int m = i;  
    4.             for(int j = i + 1;j < arr.length;j++){  
    5.                 //如果第j个元素比第m个元素小,将j赋值给m  
    6.                 if(arr[j] < arr[m]){  
    7.                     m = j;  
    8.                 }  
    9.             }  
    10.             //交换m和i两个元素的位置  
    11.             if(i != m){  
    12.                 int t = arr[i];  
    13.                 arr[i] = arr[m];  
    14.                 arr[m] = t;  
    15.             }  
    16.         }  
    17.         return arr;  
    18.     }  

           2.冒泡排序法:冒泡排序的思路就不用介绍了。上实现:

    [java] view plaincopy
     
    1. public int[] bubbleSort(int[] arr){  
    2.         for(int i = 0;i < arr.length;i++){  
    3.             //比较两个相邻的元素  
    4.             for(int j = 0;j < arr.length-i-1;j++){  
    5.                 if(arr[j] > arr[j+1]){  
    6.                     int t = arr[j];  
    7.                     arr[j] = arr[j+1];  
    8.                     arr[j+1] = t;  
    9.                 }  
    10.             }  
    11.         }  
    12.         return arr;  
    13.     }  

          3.插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。基本实现如下:

    [java] view plaincopy
     
    1. public int[] insertSort(int[] arr){  
    2.         for(int i = 1;i < arr.length;i++){  
    3.             int temp = arr[i];  
    4.             int j = i - 1;  
    5.             while(temp < arr[j]){  
    6.                 arr[j+1] = arr[j];  
    7.                 j--;  
    8.                 if(j == -1){  
    9.                     break;  
    10.                 }  
    11.             }  
    12.             arr[j+1] = temp;  
    13.         }  
    14.         return arr;  
    15.     }  

          3.快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。实现如下:

    [java] view plaincopy
     
      1. public int[] fastSort(int[] arr,int left,int right){  
      2.         if(left < right){  
      3.             int s = arr[left];  
      4.             int i = left;  
      5.             int j = right + 1;  
      6.             while(true){  
      7.                 //向右找大于s的元素的索引  
      8.                 while(i+1 < arr.length && arr[++i] < s);  
      9.                 //向左找小于s的元素的索引  
      10.                 while(j-1 > -1 && arr[--j] > s);  
      11.                 //如果i >= j 推出循环  
      12.                 if(i >= j){  
      13.                     break;  
      14.                 }else{  
      15.                     //教化i和j位置的元素  
      16.                     int t = arr[i];  
      17.                     arr[i] = arr[j];  
      18.                     arr[j] = t;  
      19.                 }  
      20.             }  
      21.             arr[left] = arr[j];  
      22.             arr[j] = s;  
      23.             //对左面进行递归  
      24.             fastSort(arr,left,j-1);  
      25.             //对右面进行递归  
      26.             fastSort(arr,j+1,right);  
      27.         }  
      28.         return arr;  
      29.     }  
  • 相关阅读:
    Python列表去重
    hash表长度优化证明
    DDD初学指南
    继承和实现的明显区别
    微信商户支付
    centos7+mono4+jexus5.6.2安装过程中的遇到的问题
    SVN:重命名文件之后不允许提交
    SpringMVC 自定义全局日期转换器
    解决Cannot change version of project facet Dynamic web module to 2.5
    Maven项目热部署到Tomcat容器下
  • 原文地址:https://www.cnblogs.com/cxzdy/p/4942065.html
Copyright © 2020-2023  润新知