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 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- GDOI2014模拟 旅行【SPFA】
旅行(travel) 从前有一位旅者,他想要游遍天下所有的景点.这一天他来到了一个神奇的王国:在这片土地上,有n个城市,从1到n进行编号.王国中有m条道路,第i条道路连接着两个城市ai,bi,由于年代 ...
- nosql使用感受
最近一个项目尝试了使用ssdb(一个类似于redis的数据结构数据库),主要感受有几点: 优势 nosql的无模式在修改和插入时很方便,不需要预先新建表或者修改表结构来新加字段,只需要代码里面使用就行 ...
- 纯JS写最简单的图片轮播
非常简单的一个大图轮播,通过将控制显示位置来进行轮播效果,写来给正在学习的新手朋友们参考交流. 先看效果:(实际效果没有这么快) 先看布局: <div id="display" ...
- CF #405 (Div. 2) B. Bear ad Friendship Condition (dfs+完全图)
题意:如果1认识2,2认识3,必须要求有:1认识3.如果满足上述条件,输出YES,否则输出NO. 思路:显然如果是一个完全图就输出YES,否则就输出NO,如果是无向完全图则一定有我们可以用dfs来书边 ...
- npm 配置和安装 express4.X 遇到的问题及解决
前言:懒得看前面两篇介绍的也可以从本节直接参考,但建议最好了解下,因为 4.X 的express 已经把命令行工具分离出来 (链接https://github.com/expressjs/genera ...
- 浅谈如何让 Bootstrap 3兼容IE8浏览器
Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.-- Bootstrap 官网 Bootstrap 来自 Twitter,是目前最 ...
- javaScript 基础学习笔记
边看视频和书记得有点杂. 1.插入JS标签 一种是在文档中插入<script></script>标签.另一种是把javaScript代码放在.js文件中.放在head中如. & ...
- linux sed命令就是这么简单
概述 sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的.在shell中,使用sed来批量修改文本内容是非常方便的. sed命令的选项 ...
- sql中如何分割字符串
使用方式: SELECT AllItem AS BldGUID FROM dbo.fn_split('01.02.03','.') 函数: GO )) )) --实现split功能 的函数 as ...
- React+Redux学习笔记:React+Redux简易开发步骤
前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...