分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

经典排序算法(Java版)
权当复习,以备引用(理论来源于:http://www.zsqz.com/jsbase/Suanfa/index.html?defination.htm,感谢该网站。JAVA源码为我所写)
1、冒泡排序 Bubble Sort
最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。
算法如下:
/**
*冒泡排序
*@paramsrc待排序数组
*/
voiddoBubbleSort(int[] src)
{
intlen=src.length;
for(inti=0;i<len;i++)
{
for(intj=i+1;j<len;j++)
{
inttemp;
if(src[i]>src[j])
{
temp=src[j];
src[j]=src[i];
src[i]=temp;
}            
}
printResult(i,src);
}     
}
2、选择排序 Selection Sort
选择排序的基本思想是:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。
当然,实际操作时,也可以根据需要,通过从待排序的记录中选择最大者与其首记录交换位置,按从大到小的顺序进行排序处理。
算法如下:
/**
*选择排序
*@paramsrc待排序的数组
*/
voiddoChooseSort(int[] src)
{
intlen=src.length;
inttemp;
for(inti=0;i<len;i++)
{
temp=src[i];
intj;
intsamllestLocation=i;//最小数的下标
for(j=i+1;j<len;j++)
{
if(src[j]<temp)
{
temp=src[j];//取出最小值
samllestLocation=j;//取出最小值所在下标
}
}
src[samllestLocation]=src[i];
src[i]=temp;
printResult(i,src);
}
}
3、插入排序 Insertion Sort
插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤ L[i]騆[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。
简言之,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。
图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。
图1 对4个元素进行插入排序
在下面的插入排序算法中,为了写程序方便我们可以引入一个哨兵元素L[0],它小于L[1..n]中任一记录。所以,我们设元素的类型ElementType中有一个常量-∞,它比可能出现的任何记录都小。如果常量-∞不好事先确定,就必须在决定L[i]是否向前移动之前检查当前位置是否为1,若当前位置已经为1时就应结束第i遍的处理。另一个办法是在第i遍处理开始时,就将L[i]放入L[0]中,这样也可以保证在适当的时候结束第i遍处理。下面的算法中将对当前位置进行判断。
算法如下:
/**
*插入排序(WHILE循环实现)
*@paramsrc待排序数组
*/
voiddoInsertSort1(int[] src)
{
intlen=src.length;
for(inti=1;i<len;i++)
{  
inttemp=src[i];
intj=i;
while(src[j-1]>temp)
{
src[j]=src[j-1];
j--;
if(j<=0)
break;
}
src[j]=temp;
printResult(i+1,src);
}
}
/**
*插入排序(FOR循环实现)
*@paramsrc待排序数组
*/
voiddoInsertSort2(int[] src)
{
intlen=src.length;
for(inti=1;i<len;i++)
{
intj;
inttemp=src[i];
for(j=i;j>0;j--)
{
if(src[j-1]>temp)
{
src[j]=src[j-1];
}else//如果当前的数,不小前面的数,那就说明不小于前面所有的数,
//因为前面已经是排好了序的,所以直接通出当前一轮的比较
break;
}
src[j]=temp;
printResult(i,src);
}
}

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

经典排序算法(Java版)相关推荐

  1. 温故10个经典排序算法(Java版)

    所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面.一个 ...

  2. java 排序经典算法,经典排序算法(java版)

    交换排序(冒泡排序.快速排序),选择排序(直接选择排序.堆排序),插入排序(直接插入排序.希尔排序) 1.冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. ...

  3. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  4. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  5. 十大经典排序算法Python版实现(附动图演示)

    来源:大数据DT 本文约5200字,建议阅读10分钟 排序算法是<数据结构与算法>中最基本的算法之一.本文介绍10种常见的内部排序算法,及如何用Python实现. 排序算法可以分为内部排序 ...

  6. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  7. 终于,把十大经典排序算法汇总了!(Java实现版)

    转载自  终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...

  8. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

  9. 十大经典排序算法(Java实现)

    排序算法的重要性不言而喻,为了加深对这十种算法的理解,固写此文. 目录 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort ...

最新文章

  1. nginx 安装与配置
  2. 类和对象—对象特性—构造函数和析构函数
  3. Exp3 免杀原理与实践 20154320 李超
  4. win系统注册缺少的库 32位系统 64位系统
  5. 校验html输入值为电话号码,js验证输入是否为手机号码或电话号码示例
  6. Day12-正则表达式Regex
  7. 开环直流电机的机械特性_无刷直流电动机的开环调速机械特性研究
  8. matplotlib 直方图_掌握了Matplotlib这两个方法,轻松绘制出漂亮的直方图!
  9. 几句话就能让你明白:VLAN是什么、TRUNK又是什么
  10. android布局--Android fill_parent、wrap_content和match_parent的区别
  11. html5集成远程控制,HP MicroServer Gen8 ILO4官方固件2.70安装及中文设置,远程控制台新增支持html5...
  12. 周志华《机器学习》习题3.4——用UCI数据集比较10折交叉验证法和留一法
  13. 常微分方程 伍卓群 题目
  14. 平面向量内积坐标公式推导_平面向量的所有公式-平面向量公式
  15. python 从大到小循环_Python循环小实例----猜大小
  16. java导出excel自动计算公式
  17. 一文读懂通信玩家半年财报,有人欢喜有人愁!
  18. 为什么RISC-V中需要恒零寄存器?
  19. 32位linux装64位rpm包,360浏览器提供rpm包(支持MIPS64)及32位deb包(兆芯)
  20. sqlplus连接到远程数据库

热门文章

  1. 【华为云技术分享】敏捷实践:一周的Sprint太短,可以调吗
  2. 【并发技术16】线程同步工具Exchanger的使用
  3. 挑战10个最难的Java面试题(附答案)【下】
  4. 补习系列(2)-springboot mime类型处理
  5. 高职高考全国计算机证书查询,2017年广东3+证书(高职高考)录取结果查询入口:附广东3+证书(高...
  6. navicat怎么设计教室管理信息系统_基于师生体验设计的智能教室是怎么样的?...
  7. Kotlin学习笔记 第二章 类与对象 第七节 数据类
  8. LeetCode-438. 找到字符串中所有字母异位词
  9. GIthub创建文件夹、跳转链接、Read.me添加图片和换行显示等操作
  10. c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...