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中可以防止字 ...
随机推荐
- makefile的三个变量
“$@”代表目标文件. “$^”代表所有的依赖文件. “$<”代表第一个依赖文件. main:main.o mytool1.o mytool2.o gcc -o $@ $^ .c.o: gcc ...
- SOA与ESB,微服务与API网关
SOA与ESB,微服务与API网关 SOA: ESB: 微服务: API网关: 参考资料: 1.漫画微服务,http://www.sohu.com/a/221400925_100039689 2.SO ...
- 转储Active Directory数据库
获取Windows域控所有用户hash: 参考:3gstudent 方法1: 复制ntds.dit: 使用NinjaCopy,https://github.com/3gstudent/NinjaCop ...
- MATLAB中运算符优先级
下述运算符的优先级从低到高: 1.先决或(||): 2.先决与(&&): 3.逻辑或(|): 4.逻辑与(&): 5.等于类(<,<=,>,>=,==, ...
- Tensorflow细节-P319-使用GPU基本的操作
如果什么都不加,直接运行装了GPU的Tensorflow,结果是这样子的 import tensorflow as tf a = tf.constant([1.0, 2.0, 3.0], shape= ...
- 设置make为内部命令
在Windows中下载Dev-cpp,配置环境变量,在MinGW64\bin下的mingw32-make.exe改名为make.exe,即可在命令行中使用make命令.
- Android入门教程(三)
对Android五大布局的描述,分别是 FrameLayout (框架布局),LinearLayout (线性布局),AbsoluteLayout (绝对布局),RelativeLayout (相对布 ...
- UOJ46. 【清华集训2014】玄学 [线段树,二进制分组]
UOJ 思路 模拟赛出了这题,结果我没学过二进制分组--一波主席树然后空间就爆炸了-- 用线段树维护时间序列,每个节点维护\(a_i\to x_i\times a_i+b_i,i\in [1,n]\) ...
- 02-线性结构3 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- Mac版微信无法安装之始末
前言 Mac版微信安装不了...纠结了一周时间 ̄□ ̄||... 今天终于可以登录了(虽然还是没有安装到电脑上,但可以使用了) 因为之前也查了很多,有人遇到,但是没有可以解决我这个问题的方法, 浪费了很 ...