Java学习笔记——排序算法之简单排序
男儿何不带吴钩,收取关山五十州。请君暂上凌烟阁,若个书生万户侯?
public class BubbleSort {
//最简单的排序,从0开始逐个对比往上冒
public static void bubbleSort(int[] arr) {
for (int i = ; i < arr.length-1; i++) {
for (int j = i+; j < arr.length; j++) {
if (arr[i]>arr[j]) {
arr[i] = arr[i]^arr[j];
arr[j] = arr[i]^arr[j];
arr[i] = arr[i]^arr[j];
}
}
}
}
//正宗冒泡,正向
public static void bubbleSortA(int[] arr) {
for (int i = ; i < arr.length-; i++) {
for (int j = ; j < arr.length-i-; j++) {
if (arr[j]>arr[j+]) {
arr[j] = arr[j]^arr[j+];
arr[j+] = arr[j]^arr[j+];
arr[j] = arr[j]^arr[j+];
}
}
}
}
//反向
public static void bubbleSortB(int[] arr) {
for (int i = ; i < arr.length-; i++) {
for (int j = arr.length-; j > i; j--) {
if (arr[j-]>arr[j]) {
arr[j] = arr[j]^arr[j-];
arr[j-] = arr[j]^arr[j-];
arr[j] = arr[j]^arr[j-];
}
}
}
}
//优化冒泡
public static void bubbleSortA0(int[] arr) {
boolean flag = true;
for (int i = ; i < arr.length- && flag; i++) {
flag = false;
for (int j = arr.length-; j > i; j--) {
if (arr[j-]>arr[j]) {
arr[j] = arr[j]^arr[j-];
arr[j-] = arr[j]^arr[j-];
arr[j] = arr[j]^arr[j-];
flag = true;//若没有发生交换,说明每对的前一位都不比后一位更大。无需再次排序
}
}
}
}
}
2、简单选择排序,跟冒泡第一个思路差不多。区别在于不是每次都交换,而是记录最值的下标位置,每趟的最后交换
public class SimpleSelectSort {
//简单冒泡的升级版,内外层循环不变,赋值n次,交换一次
public static void simpleSelectSort(int[] arr){
int min;
for (int i = ; i < arr.length-1; i++) {
min = i;
for (int j = i+; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (min != i) {
arr[min] = arr[min] ^ arr[i];
arr[i] = arr[min] ^ arr[i];
arr[min] = arr[min] ^ arr[i];
}
}
}
}
3、直接插入法,这个思路就很好了,类似于捋牌。
public class StraightInsertionSort {
//该方法从第二位开始取出,如果比前面小插入,前面的后移,想象理牌5,3,4,6,2,同花顺
public static void straightinsertionsort(int[] arr){
int temp;
for (int i = ,j = ; i < arr.length; i++) {
if (arr[i]<arr[i-]) {
temp = arr[i];//取出牌
j = i-;//给内层循环赋初值
while (j>= && arr[j] > temp) {
arr[j+] = arr[j];//比牌大的后移
j--;
}
arr[j+] = temp;//插入牌
}
}
}
}
Java学习笔记——排序算法之简单排序的更多相关文章
- JAVA学习笔记(4)—— 排序算法
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ...
- [java初探06]__排序算法的简单认识
今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...
- 5.4 集合的排序(Java学习笔记)(Collections.sort(),及Arrays.sort()底层分析)
1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- java安装1335错误解决办法(亲测)
心血来潮想了解一下java,结果一开始就碰到了让心"恶心"的1335错误. 废话不多说,直接看下面: 你可以先尝试在这个链接下载java.exe文件 http://www.orac ...
- java实现微信红包分配算法
红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...
- Sublime Text3 编辑器我的最爱
简介 Sublime Text 3是一个神奇的文本编辑器,适合程序员.作家.它有很多亮点功能,比如多选择.Go Anything.命令面板.多选择可以让你同时编辑多出代码,Got Anything 像 ...
- 于普通用户启动UAC问题
在VS中设置UAC级别操作如下: 项目属性-配置属性-连接器-清单文件 1.UAC执行级别: aslnvoker: 权限级别最低,不需要管理员身份. highestAvailable:获取最高权限执行 ...
- 在线阅读PDF文件js插件——pdf.js
最近接到一个需求大致是这样的,要求在移动端和pc端能够在线阅读pdf文件,类似百度文库的功能. 首先想到的就是插件,github(全球最大的男性交友网站- -恩)上一大堆啊,首先找到一个PDFobje ...
- 记一次解析XML转对象的笔记
项目中调用第三方API,返回格式是XML字符串,需要将XML反序列化为对象,格式如下: <?xml version="1.0"?> <Response xmlns ...
- 在开源中国(oschina)上创建托管项目
***************************************************************** 目标: 1.能上传自己的项目到oschina上并且进行管理 2.能进 ...
- nlog学习使用
最近有不少朋友推荐我用NLog.我以前都是自己写txt的文本输出log,以前别人用log4net的时候看那个配置文件,看得我一阵烦,我比较喜欢约定胜于配置的组件.这次玩了一波NLog,,相当不错.一下 ...
- Java面试题04-final关键字详解
Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...
- Oracle to_date函数
TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year: yy two digits 两位年 显示值:07yyy three di ...