admin 发表于 2014-3-4 19:49

java中的几种排序方法

数组, 有些面试题中会出现.在实际工程项目中有现成的优化的排序API
1) 选择排序
   原理:a 将数组中的每个元素,与第一个元素比较
          如果这个元素小于第一个元素, 就将这个
         两个元素交换.
       b 每轮使用a的规则, 可以选择出一个最小元素
      放到第一个位置.
       c 经过n-1轮比较完成排序
   简单说: 每轮选择最小的放到前面.
   原理说明:
   ary={8,2,3,7,1}
   ary={1|8,3,7,2}
   ary={1,2|8,7,3}
   ary={1,2,3|8,7}
   ary={1,2,3,7|8}
   代码分析:
   i 代表第一个数据的位置
   j 代码后部每一个数据的位置
   ary      i j ary ary ary>ary <->
{8|2,3,7,1} 0 1   8      2      true      8<->2
{2|8,3,7,1} 0 2   2      3      false
{2|8,3,7,1} 0 3   2      7      false
{2|8,3,7,1} 0 4   2      1      true      2<->1
{1,8|3,7,2} 1 2   8      3      true      8<->3
{1,3|8,7,2} 1 3   3      7      false      
{1,3|8,7,2} 1 4   3      2      true      3<->2
{1,2,8|7,3} 2 3   8      7      true      8<->7
{1,2,7|8,3} 2 4   7      3      true      7<->3
{1,2,3,8|7} 3 4   8      7      true      8<->7
{1,2,3,7,8}   
for: i= 0 ~ < ary.length - 1;
    for: j=i+1 ~ <ary.length
      if(ary>ary){
               ary<->ary
      }

2) 冒泡排序
原理: a 逐一比较数组中相邻的两个元素, 如果后面
         的数字小于前面的数字, 就交换先后元素.
       b 经过一个轮次的比较, 一定有一个最大的排
         在最后的位置.
       c 每次比较剩下的元素, 经过n-1次比较, 可以
         实现排序
简单说: 比较相邻元素,大的向后交换
   原理说明:
   ary={8,2,3,7,1}
   ary={2,8,3,7,1}
   ary={2,3,8,7,1}
   ary={2,3,7,8,1}
   ary={2,3,7,1|8}
   ary={2,3,7,1|8}
   ary={2,3,7,1|8}
   ary={2,3,1|7,8}
   ary={2,3,1|7,8}
   ary={2,1|3,7,8}
   ary={1,2,3,7,8}
   i代表次数
   j代表比较位置
    ary   i j j+1 ary ary > <->
{8,2,3,7,1} 0 01    8       2       true      8<->2
{2,8,3,7,1} 0 12    8       3       true      8<->3
{2,3,8,7,1} 0 23    8       7       true      8<->7
{2,3,7,8,1} 0 34    8       1       true      8<->1
{2,3,7,1|8} 1 01    2       3       false   
{2,3,7,1|8} 1 12    3       7       false
{2,3,7,1|8} 1 23    7       1       true      7<->1
{2,3,1|7,8} 2 01    2       3       false
{2,3,1|7,8} 2 12    3       1       true      3<->1
{2,1|3,7,8} 3 01    2       1       true      2<->1
{1,2,3,7,8}
for: i = 0~ < ary.length-1
    for: j = 0~ < ary.length - i -1;
      if(>){
          <->
      }

3) 插入排序
原理: a 将数组分为两部分, 将后部分的第一张逐一
         与前部分每一张比较, 如果当前元素小, 就
         一点被比较元素.
      b 找到合理位置插入.
原理说明:
   temp = 1
{8|2,3,7,1}
{2,8|8,7,1}
{2,3,8|7,1}
{2,3,8|8,1}
{2,3,7,8|8}
{2,3,7,7|8}
{2,3,3,7|8}
{2,2,3,7|8}
{1,2,3,7|8}

   temp 代表取出的待插入元素
   i 代表后组待插入元素 位置
   j 代表前组每个元素的位置
                                     (移动)   插入
   ary      itjaryt< -> t->
{8|2,3,7,5} 120    8   true   8->   
{8|8,3,7,5} 12 -1                            2->
{2,8|3,7,5} 231    8   true   8->
{2,8|8,7,5} 230    2   false             3->
{2,3,8|7,5} 372    8   true   8->
{2,3,8|8,5} 371    3   false             7->
{2,3,7,8|5} 453    8   true   8->
{2,3,7,8|8} 452    7   true   7->
{2,3,7,7|8} 451    3   false             5->
{2,3,5,7|8}
i= 1 ~ <ary.length, i++
       t = ;
       j= i-1 ~ >=0, j--
               if(t<){
                       -> //移动 ary=ary
               }else{
                          break j;
               }
       t->//插入


2. java 系统排序 Arrays.sort(), 排序算法性能很好


3. 方法的递归调用
1) java 的栈: 是Java进程启动时候在内存中开辟的存储空间
   栈内存的利用方式LIFO(后进先出).
   A Java所有局部变量都在栈中分配(压入)方法的参数也是局部变量
   B 局部变量在离开作用域时候回收 就是从栈中弹出(删除).
2) Java方法调用使用栈实现, 递归调用就是栈实现的
3) 递归时候要按照递归深度分配全部临时变量, 栈开销很大, 性能
   不好, 要注意不要超过栈的大小, 并且一定要给出结束条件, 否则
   会造成栈溢出错误.

发光的影子 发表于 2015-10-15 13:46

看了看学习学习哈哈哈哈

java宫城大师 发表于 2016-3-17 21:59

学习一下。谢谢:victory:

woniu 发表于 2016-4-12 12:22

这个项目太棒勒!下下来学习下!

lymlj1314 发表于 2016-6-16 18:37


真心不错,推荐自己的好友去学习。

myou525 发表于 2016-12-8 11:00

过来学习了,果然是好的学习资料,不错

wudizxt 发表于 2017-8-12 20:47

不错不错不错不错

xjm 发表于 2017-8-19 12:46

不错,学习学习

劉様 发表于 2017-8-20 08:05

学习学习,谢谢分享
页: [1]
查看完整版本: java中的几种排序方法