java基础11天
冒泡排序
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处,第二次比较厚,最大值放在了倒数第二的位置,一直到第二个元素确定了,整个数组的顺序也就确定了
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {7,3,6,1,9,4,0};
System.out.println("排序前");
method(arr);
bubbleSort(arr);
System.out.println("排序后");
method(arr);
}
//实现升序排列
public static void bubbleSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]= arr[j+1];
arr[j+1] = temp;
}
}
}
}
//自定义数组打印方法
public static void method(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
}
选择排序
从0索引开始,依次和后面的元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处,依次类推,直到倒数第二个数和最后一个数比完,得出的较大就是倒数第一个位置上的数是所有数中的最大值
public class ArrayDemo1 {
public static void main(String[] args) {
int[] arr ={3,4,8,1,2,5,7,6};
System.out.println("排序前");
print(arr);
selectSort(arr);
System.out.println("排序后");
print(arr);
}public static void selectSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
public static void print(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
}
总结
两种排序最大的不同是里层循环的开始值和结束值
冒泡排序:内层循环开始值都是0开始,结束值是变化的
选择排序:内层循环的开始值是变化的,结束值是固定的,都是最大索引值。
二分查找(折半查找)
/*
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
*
* 分析:
* A:定义最大索引,最小索引
* B:计算出中间索引
* C:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大 左边找
* 小 右边找
* D:重新计算出中间索引
* 大 左边找
* max = mid - 1;
* 小 右边找
* min = mid + 1;
* E:回到B
*/
public class ArrayDemo3 {
public static void main(String[] args) {
int[] arr = {3,4,2,8,5,6,1};
selectSort(arr);
int res = getIndex(arr, 6);
System.out.println(res);
}
//定义方法,先将数组排列
public static void selectSort(int[] ch){
for (int i = 0; i < ch.length-1; i++) {
for (int j = i+1; j < ch.length; j++) {
if (ch[i]>ch[j]) {
int temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}
}
public static int getIndex(int[] arr, int a){
//定义最大索引、最小索引
int max = arr.length-1;
int min = 0;
//计算出中间索引
int mid = (min+max)/2;
while(true){
if(arr[mid]==a){
return mid;
}else{
if(arr[mid]<a){
min = mid +1;
}else{
max = mid -1;
}
if(min>max){
return -1;
}
mid = (min+max)/2;
}
}
}
}
Arrays类概述
系统提供针对数组进行的操作的工具类
提供了排序、查找等功能。不用我们手动去写算法,直接拿来就用
静态方法
public static String toString(int[] a):将数组转换成字符串
public static void sort(int[] a):对一个int数组进行升序排序ascending
public static int binarySearch(int[] a,int key):在数组中进行二分查找
java基础11天的更多相关文章
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- 【java基础 11】java集合框架学习
导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- Java基础11 对象引用
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992484.html 作者:Vamei 出处:http://www.cnblogs.com ...
- Java基础11:Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...
- Java基础11 对象引用(转载)
对象引用 我们沿用之前定义的Human类,并有一个Test类: public class Test{ public static void main(String[] args){ ...
- java基础11(IO流)-字符流
转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...
- Java基础11一常用类
1.包装类 byte---java.lang.Byte char---java.lang.Character short—java.lang.Short int---java.lang.Integer ...
- java基础(11)--封装
一.java面向对象三大特别: 1.封装 2.继承 3.多态 二.封装的作用 1.属性私有化(private) 2.对外提供简单的入口 如公开的set()与get()方法,并且都不带static ...
随机推荐
- sdut 迷之容器(线段树+离散化)
#include <iostream> #include <algorithm> #include <string.h> #include <stdio.h& ...
- HDU5139:Formula(找规律+离线处理)
http://acm.hdu.edu.cn/showproblem.php?pid=5139 Problem Description f(n)=(∏i=1nin−i+1)%1000000007You ...
- CentOS7系统上部署.net core程序
一.准备工作 首先安装 xshell 和 xftp ,前者用于SSH连接Linux服务器,后者用于FTP上传下载文件. xshell和xftp个人使用是免费的,下载地址 之后分别输入用户名和密码登录主 ...
- java 的==和equals的区别(二)
java 的==和equals的区别 java 的==和equals的区别 ==通常表明引用的是同一个东西(引用的地址相同),equals通常表明两个对象的内容相同(值相同) ------------ ...
- VS2010/MFC编程入门之十六(对话框:消息对话框)
前面几节鸡啄米讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消 ...
- CCPC-Wannafly Winter Camp Day5 (Div2, onsite)
Replay: Dup4: 时间复杂度算不对? 一点点思路不经过验证就激动的要死? 浪费自己一个小时还浪费别人一个小时? 对1e3不敏感? 1e3 * 1e3是多少? 模拟建边跑dp不写非要写个大模拟 ...
- 常用php操作redis命令整理(二)哈希类型
HSET将哈希表key中的域field的值设为value;如果field是哈希表中的一个新建域,并且值设置成功,返回1;如果哈希表中域field已经存在且旧值已被新值覆盖,返回0. <?php ...
- JAVA面试题整理(7)-Redis
Redis面试题汇总 1.Redis用过哪些类型数据,以及Redis底层怎么实现 分析:是不是觉得这个问题很基础,其实我也这么觉得.然而根据面试经验发现,至少百分八十的人答不上这个问题.建议,在项目中 ...
- (转载)找圆算法((HoughCircles)总结与优化
Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆 ...
- c++语言中的遍历
原文地址:http://www.cnblogs.com/xylc/p/3653036.html 随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化. vecto ...