java学习笔记(5)-排序(1)
标签(空格分隔): 学习笔记
1. 冒泡
public class MaoPao{
public static void sort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1]){
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
public static void main(String[] args){
int[] arr=new int[]{1,4,11,-3,34,5,-2,7,8,0,12,};
sort(arr);
for(int num:arr){
System.out.print(num+" ");
}
}
}
2. 快排
public class QuickkSort {
public static void sort(int[] matrix,int start,int end) {
if(start>=end) return;
int l=start;
int r=end;
int tmp=matrix[l];
while(l<r) {
while(matrix[r]>=tmp && l<r) {
r--;
}
matrix[l]=matrix[r];
while(matrix[l]<=tmp && l<r) {
l++;
}
matrix[r]=matrix[l];
}
matrix[l]=tmp;
sort(matrix,start,l-1);
sort(matrix,l+1,end);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
sort(arr, 0, arr.length-1);
for (int num:arr) {
System.out.print(num+" ");
}
}
}
3. 选择排序
public class SelectSort {
public static void sort(int[] arr) {
for(int i=0;i<arr.length;i++) {
int mindex=i;
for(int j=i;j<arr.length;j++) {
if(arr[mindex]>arr[j])
mindex=j;
}
int tmp=arr[mindex];
arr[mindex]=arr[i];
arr[i]=tmp;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
sort(arr);
for(int num:arr) {
System.out.print(num+" ");
}
}
}
4.直接插入
public class InsertSort {
public static void sort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {
for(int j=i+1;j>0;j--) {
if(arr[j]<arr[j-1]) {
int tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}else break;
//break是一定要加的,如果插入之后不加break,插入之后还会和前面的比较,浪费时间
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
sort(arr);
for(int num:arr) {
System.out.print(num+" ");
}
}
}
5.二分插入
public class Insert {
public static void sort(int [] arr) {
for(int i=0;i<arr.length-1;i++) {
int left=0;
int right=i;
while(left<right) {
int mid=left+(right-left+1)/2;
if(arr[mid]>=arr[i+1]) {
right=mid-1;
}
else {
left=mid;
}
}
int k=arr[i+1]>=arr[left]?left+1:left;
//上述这段代码还可以解决一个二分查找问题,及如果找到某个数在数组中的索引,就返回他的索引,如果这个数存在多个,就返回最左边的那个索引,效果不错
int tmp=arr[i+1];
for(int j=i;j>=k;j--) {
arr[j+1]=arr[j];
}
arr[k]=tmp;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {1,9,2,2,6,8,3,56,23,66,21,12,14,34};
sort(arr);
for(int num:arr) {
System.out.print(num+" ");
}
}
}
java学习笔记(5)-排序(1)的更多相关文章
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
- 20145330第五周《Java学习笔记》
20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记04--数组
java学习笔记04--数组 数组复制的方法是使用System类提供的arraycopy()方法,其语法如下: System.arraycopy(Object src, int srcPos, Obj ...
- java学习笔记13--比较器(Comparable、Comparator)
java学习笔记13--比较器(Comparable.Comparator) 分类: JAVA 2013-05-20 23:20 3296人阅读 评论(0) 收藏 举报 Comparable接口的作用 ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- 20145230《java学习笔记》第七周学习总结
20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
随机推荐
- mybatis的注意事项一
在UserMapper.xml文件中写resultType="cn.smbms.dao.pojo.User"返回类型的全路径是不是很长,而且也比较不美观:不便于后期项目的维护. 解 ...
- 【游记】CSP2019 垫底记
考试时候的我: Day 1 做完 \(T1\) 和 \(T2\),还有 \(2.5 h\),我想阿克 \(Day1\).(\(T3\):不,你不想) 不过一会就想出来给每个点 dfs 贪心选一个点,然 ...
- LeetCode 1027. Longest Arithmetic Sequence
原题链接在这里:https://leetcode.com/problems/longest-arithmetic-sequence/ 题目: Given an array A of integers, ...
- React-Router常见API
React-Router是React项目中处理路由的库. 1. HashRouter 通过hashchange监听路由的变化,通过window.location.hash赋值触发监听的变化. 本质是一 ...
- C++ socket bind() 函数绑定错误
VS2015编译错误: errorCxxxx: 'initializing' : cannot convert from 'std::_Bind<false,void,SOCKET&,s ...
- windows串口编程Win32,PComm串口开发
https://blog.csdn.net/u011430225/article/details/51496456 https://blog.csdn.net/eit520/article/detai ...
- linux定时执行shell脚本
写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...
- Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...
- 安装关系型数据库MySQL 安装大数据处理框架Hadoop
作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.Hadoop的介绍 Hadoop最早起源于Nutch.Nut ...
- magento2重写virtualType并且传参
今天遇到一个需求需要重写一个block,但是这个block是应用virtualType实现,所以需要先重写virtualType,然后却因为参数丢失而获取不到正确的结果.因此,查阅文档,需要用type ...