常用算法

1.冒泡排序:

原理:比较两个相邻的元素,将值大的元素交换至右端

示例:

public static void bubbleSort(int[] a) {
int n = a.length;
//总共进行n-1轮的比较
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (a[j] > a[j + 1]) {//交换
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}

2.选择排序:

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。

示例:

public static void selectionSort(int[] a) {
for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序
int m = i;
for(int j = i + 1; j < a.length; j++){// 选最小的记录
if(a[j] < a[m]){
m = j; //记下目前找到的最小值所在的位置
}
}
if(i != m){ //交换a[i]和a[m]
int temp = a[i];
a[i] = a[m];
a[m] = temp;
}
}
}

3.插入排序:

原理:从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置

示例:

public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0; j--) {
if (a[j] < a[j - 1]) {
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
} else {
break;
}
}
}
}

4.快速排序:

  • 快速排序是对冒泡排序的一种改进
  • 思想:在数组中找出适当的轴心,然后将数组一分为二,分别对左边与右边数组进行排序

二分查找

  • 前提条件: 已排序的数组中查找
  • 二分查找的基本思想是:

    – 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2;

    – 然后将待查找的值与中间点位置的值比较:

    • 若相等,则查找成功并返回此位置。
    • 若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。
    • 若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。下一次查找是针对新的查找区间进行的。

示例:

public static int binarySearch(int[] a, int num) {
int low = 0; // 起点
int upper = a.length - 1; // 终点
while (low <= upper) {
int mid = (low + upper) / 2; // 中间点
if (a[mid] < num) { // 中间点的值小于要查找的值
low = mid + 1; // 更改查找的起点为中间点位置后一位
} else if (a[mid] > num) { // 中间点的值大于要查找的值
upper = mid - 1; // 更改查找的终点为中间点位置前一位
} else { // 中间点的值等于要查找的值
return mid; // 返回该位置
}
}
return -1;
}

数组帮助类Arrays

  • java.util.Arrays 数组操作工具
public static void sort(int[] a);  //经过调优的快速排序法
public static int binarySearch(int[] a, int key); //使用二分搜索法

二维数组

  • Java并没有真正的多维数组,二维数组可以看成以数组为元素的数组。如:
int [][] a = { {1}, {4,5,6}, {7,8}};

Java基础5一数组的常见应用算法的更多相关文章

  1. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  2. Java基础语法(7)-数组

    title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...

  3. Java 基础类型转换byte数组, byte数组转换基础类型

    Java 基础类型转换byte数组, byte数组转换基础类型 Java类型转换 java类对象转化为byte数组

  4. Java基础语法(数组)

    第4天 Java基础语法 今日内容介绍 u 流程控制语句(switch) u 数组 第1章 流程控制语句 1.1 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句 ...

  5. Java基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...

  6. Java基础学习(二)—数组

    一.数组的概念 定义: 数组是存储同一种数据类型的多个元素的集合. 数组既可以存储基本数据类型,也可以存储引用数据类型. 格式: 格式1: 数据类型[] 数组名; 格式2: 数据类型 数组名[]; 这 ...

  7. Java基础系列--04_数组

    一维数组: (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1. 编号的专业叫法:索引 (3)定义格式 A:数据类型[] 数组名;(一 ...

  8. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  9. Java基础学习之数组基本属性和方法

    数组对于每一门编程语言都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java语言中提供的数组是用来存储固定大小的同类型元素.你可以声明一个数组变量,如 int[100] 来代替直接 ...

随机推荐

  1. CryptoJS简单使用(request.js) 拦截器的使用

    首先准备一份明文和秘钥: var plaintText = 'aaaaaaaaaaaaaaaa'; // 明文var keyStr = 'bbbbbbbbbbbbbbbb'; // 一般key为一个字 ...

  2. Hadoop-2.2.0集群部署时live nodes数目不对的问题

    关于防火墙,hadoop本身配置都确定没任何问题,集群启动不报错,但打开50070页面,始终live nodes数目不对,于是我尝试/etc/hosts文件配置是否存在逻辑的错误: 127.0.0.1 ...

  3. LINUX - .so 与 .a

    .a gcc -c test1.c test2.c(或者g++ -c test1.cpp test2.cpp  )---   .o ar -r libtest.a test1.o test2.o    ...

  4. python jieba分词(添加停用词,用户字典 取词频

    中文分词一般使用jieba分词 1.安装 pip install jieba 2.大致了解jieba分词 包括jieba分词的3种模式 全模式 import jieba seg_list = jieb ...

  5. apicloud iphoneX底部虚拟键盘遮挡

    1.首先,底部的高不能写死. 2. var footer = $api.byId('footer'); $api.fixTabBar(footer);这句应该写在 footerHeight = $ap ...

  6. 15.3 Task 异常

    1. 在等待时拆包异常 在等待任务时,任务出错或取消都将抛出异常,但并不是 AggregateException .大多情 况下为方便起见,抛出的是 AggregateException 中的第一个异 ...

  7. Java 实现邮件发送功能

    1.新建model SendMail.java import java.util.Properties; public class SendMail { // 发送邮件的服务器的IP和端口 priva ...

  8. oculus network error ovr53225466

    最近调试oculus,搬运代码到win10平台,发现最近FB对oculus的服务程序进行了更新,必须要登陆账号才能进行调试. 于是安装oculusclient,但是登陆的过程中出现了问题,如果不用代理 ...

  9. CLR与Netframework版本的关系

    CLR有3个版本,详细地址看微软官方文档

  10. MySQL 5.7并行复制时代

    众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能,官方称为为enhanced mu ...