java常见排序方法
1.java常用排序方法
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[i] ary[j]  ary[i]>ary[j]  [i]<->[j]
  {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}   4
  部分重要代码:
    i= 0 ~ < ary.length - 1;
    j=i+1 ~ <ary.length
    if(ary[i]>ary[j]){
        //ary[i]<->ary[j]
        int temp = ary[i];
        ary[i]=ary[j];
        ary[j]=temp;
    }
      
 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[j]  ary[j+1] [j]>[j+1]   [j]<->[j+1]
  {8,2,3,7,1}  0 0  1     8          2          true        8<->2
  {2,8,3,7,1}  0 1  2     8          3          true        8<->3
  {2,3,8,7,1}  0 2  3     8          7          true        8<->7
  {2,3,7,8,1}  0 3  4     8          1          true        8<->1
  {2,3,7,1|8}  1 0  1     2          3          false     
  {2,3,7,1|8}  1 1  2     3          7          false 
  {2,3,7,1|8}  1 2  3     7          1          true        7<->1
  {2,3,1|7,8}  2 0  1     2          3          false
  {2,3,1|7,8}  2 1  2     3          1          true        3<->1
  {2,1|3,7,8}  3 0  1     2          1          true        2<->1
  {1,2,3,7,8}
  部分重要代码:
    i = 0~ < ary.length-1
    j = 0~ < ary.length - i -1;  
    if([j]>[j+1]){
        [j]<->[j+1]
    }
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      i   t   j   ary[j]    t<[j]      [j]->[j+1]    t->[j+1]
  {8|2,3,7,5}  1  2  0    8        true       8->[j+1]   
  {8|8,3,7,5}  1  2 -1                                           2->[j+1]
  {2,8|3,7,5}  2  3  1    8        true       8->[j+1]
  {2,8|8,7,5}  2  3  0    2        false                      3->[j+1]
  {2,3,8|7,5}  3  7  2    8        true       8->[j+1]
  {2,3,8|8,5}  3  7  1    3        false                      7->[j+1]
  {2,3,7,8|5}  4  5  3    8        true       8->[j+1] 
  {2,3,7,8|8}  4  5  2    7        true       7->[j+1] 
  {2,3,7,7|8}  4  5  1    3        false                      5->[j+1]
  {2,3,5,7|8}  5
  部分重要代码:
    i= 1 ~ <ary.length, i++
      t = [i];
        j= i-1 ~ >=0, j--
        if(t<[j]){
            [j]->[j+1] //移动
        }else{
             break j;
        }
      t->[j+1]//插入
2. java 系统排序 Arrays.sort(), 排序算法性能很好
3. 方法的递归调用
 1) java 的栈: 是Java进程启动时候在内存中开辟的存储空间
   栈内存的利用方式LIFO(后进先出). Java所有局部变量都在栈中
   分配(压入), 方法的参数也是局部变量, 局部变量在离开作用域
   时候回收 就是从栈中弹出(删除). 
 2) Java方法调用使用栈实现, 递归调用就是栈实现的
 3) 递归时候要按照递归深度分配全部临时变量, 栈开销很大, 性能
   不好, 要注意不要超过栈的大小, 并且一定要给出结束条件, 否则
   会造成栈溢出错误.
   
  案例:1+2+3+...+n=f(n)=n+f(n-1) && (n>0, f(1)=1)  
 注意事项: 解决问题简练,性能很差。一定给出结束条件。
若有不完善的地方请大家多提意见,转发时请注明出处!
java常见排序方法的更多相关文章
- 转:Java实现几种常见排序方法
		
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
 - Java实现几种常见排序方法
		
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 以下常见算法的定义 1. 插入排序:插入排序基本操作就是将一 ...
 - Java常见排序算法之直接插入排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 - Java常见排序算法之堆排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 - Java常见排序算法之直接选择排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 - Java常见排序和编程算法
		
快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显 ...
 - Java常见排序算法之归并排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 - Java常见排序算法之Shell排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 - Java常见排序算法之折半插入排序
		
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
 
随机推荐
- Swift数组的存取与修改
			
对数组的存取与修改可以通过数组的方法和属性来进行,或者使用数组的下标语法. 要知道数组中元素的数量,可以查看它的只读属性count: println("The shopping list c ...
 - 5.Smart使用内置函数或者自定义函数
			
1.使用内置函数 例如使用date函数 {"Y-m-d"|date:$time}格式{第一个参数|方法:第二个参数:第三个参数}即可转换成 2016-07-19 2.使用resi ...
 - CSS样式之连接方式
			
前言:上一篇博客是HTML基本结构和标签,是笔者学习HTML的笔记,本篇博客开始记录CSS,废话不多说,直接进入主题. 首先,我们要知道CSS是什么.简单地说,CSS层叠样式表是用来表现HTML或XM ...
 - Web自动化之Headless Chrome编码实战
			
API 概览 && 编码Tips 文档地址 github Chrome DevTools Protocol 协议本身的仓库 有问题可以在这里提issue github debugger ...
 - [图形学] 习题8.12 NLN二维线段裁剪算法实现
			
Nicholl-Lee-Nicholl二维线段裁剪算法相对于Cohen-Sutherland和Liang-Barsky算法来说,在求交点之前进行了线段端点相对于几个区域的判断,可以确切的知道要求交点的 ...
 - 数据结构(C语言版)链表相关操作算法的代码实现
			
这次实现的是带头结点的单链表的初始化.遍历.创建.插入.删除.判断链表是否为空.求链表长度函数,编译环境是vs2013. 其中插入和删除函数中循环的条件目前还不太明白. #include<ios ...
 - PHP机器学习库php-ml的简单测试和使用
			
php-ml是一个使用PHP编写的机器学习库.虽然我们知道,python或者是C++提供了更多机器学习的库,但实际上,他们大多都略显复杂,配置起来让很多新手感到绝望.php-ml这个机器学习库虽然没有 ...
 - 3,Spring Boot热部署
			
问题的提出: 在编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来就真的是打几个Hello World就下班了.那么如何解决热部署的问题呢 ...
 - [bzoj 1468][poj 1741]Tree [点分治]
			
Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...
 - NOIP模拟:切蛋糕(数学欧拉函数)
			
题目描述 BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段 ...