冒泡排序 | 快速排序 | 线性查找 | 二分查找等

目录

    • 排序算法:冒泡排序
    • 排序算法:快速排序
    • 数组的复制、反转、查询(线性查找、二分查找)

排序算法:冒泡排序

public static void main(String[] args){
	int[] arr = new int[]{43,32,76,-98,0,64,32,15,108,-21,59};
	//冒泡排序
	for(int i = 0;i< arr.length - 1;i++){
		for(int j = 0;j< arr.length - 1 -i;j++){
			if(args[j] > arr[j+1]){
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	for(int i = 0;i< arr.length;i++){
	System.out.print(arr[i]+"\t");
	}
}

排序算法:快速排序

通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

/**
 * 快速排序
 * 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,
 * 则分别对这两部分继续进行排序,直到整个序列有序。
 */
public class QuickSort {
	private static void swap(int[] data, int i, int j) {
		int temp = data[i];
		data[i] = data[j];
		data[j] = temp;
	}

	private static void subSort(int[] data, int start, int end) {
		if (start < end) {
			int base = data[start];
			int low = start;
			int high = end + 1;
			while (true) {
				while (low < end && data[++low] - base <= 0)
					;
				while (high > start && data[--high] - base >= 0)
					;
				if (low < high) {
					swap(data, low, high);
				} else {
					break;
				}
			}
			swap(data, start, high);
			
			subSort(data, start, high - 1);//递归调用
			subSort(data, high + 1, end);
		}
	}
	public static void quickSort(int[] data){
		subSort(data,0,data.length-1);
	}
	
	public static void main(String[] args) {
		int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
		System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
		quickSort(data);
		System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
	}
}

数组的复制、反转、查询(线性查找、二分查找)

public static void main(String[] args){
	String arr = new String[]{"AA","BB","JJ","GG","MM","DD"};
	
	//数组的复制(区别于数组变量的赋值:arr1 = arr)
	String[] arr1 = new String[arr.length];
	for(int i = 0;i<arr1.length;i++){
		arr1[i] = arr[i];
	}
	
	//数组的反转
	//方式一:
	for(int i =0;i < arr.length / 2;i++){
		String temp =arr[i];
		arr[i] = arr[arr.length - i -1];
		arr[arr.length - i -1] = temp;
	}
	//方式二:
	for(int i =0;j = arr.length -1;i<j;i++,j--){
		String temp =arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	
	//遍历
	for(int i = 0;i < arr.length;i++){
		System.out.print(arr[i]+"\t");
	}
  	System.out.println();
	
	//查找(搜索)
	//线性查找
    //思路:通过遍历的方式,一个一个的数据进行比较、查找。
  	//具普遍适用性
	String dest = "BB";
	boolean isFlag = true;
	for(int i=0;i<arr.length;i++){
		if(dest.equels(arr[i])){
			System.out.println("找到指定的元素,位置为:"+i);
			isFlag = false;
			break;
		}
	}
	if(isFlag){
		System.out.println("很遗憾没有找到哦!");
	}
  
  	//二分法查找
	//前提,所有查询的数组必须有序
  	//每次比较中间值,折半的方式检索
	int arr2 = new int[]{-98,-34,2,34,66,79,106,214,333};
	int dest1 = -34;
	int head = 0;//初始化的首索引
	int end = arr2.length -1;//初始化末索引
	boolean isFlag1 = true;
	while(head < end){
		int middle = (head + end)/2;
		if(dest1 == arr2[middle]){
			System.out.println("找到指定的元素,位置为:"+middle);
			isFlag1 = false;
			break;
		}else if(arr2[middle] > dest1){
			end = middle - 1;
		}else{
			head = middle + 1;
		}
	}
	if(isFlag){
		System.out.println("很遗憾没有找到哦!");
	}
}

好了,我亲爱的读者朋友,以上就是本文的全部内容了!!!

觉得有点用记得给我点赞哦!

通过坚持不懈地学习,持续不断地输出,你的编程基本功算得上是突飞猛进。

为了帮助更多的程序员,专注于分享有趣的 Java 技术编程和有益的程序人生。一开始,阅读量寥寥无几,关注人数更是少得可怜。但随自己的不断努力,阅读量和关注人都在猛烈攀升。

绝对不容错过,期待与你的不期而遇。

热门文章

暂无图片
编程学习 ·

由Spring管理的对象的生命周期

注:完整代码在文章最后 生命周期:某个对象从创建到最终销毁会经历的历程! 通常,需要讨论生命周期时,对应的数据类型的对象都不是由开发人员自行维护的! 被容器维护的对象,都是由容器创建对象,并在适当的时候调用其中的某些方法的!而开发人员需要做的就是“确定满足某条…
暂无图片
编程学习 ·

2.7 网络抓包

1.简介 抓包是指对网络传输中发送与接收的数据包进行拦截、重发、编辑和转存的操作。 在开发网络爬虫时,给定URL,开发者必须清楚客户端是如何向服务器发送请求的,以及客户端发出请求后服务器返回的数据是什么。只有了解这些内容,开发者才能在程序中拼接URL,针对服务返回的…
暂无图片
编程学习 ·

Android 模拟器联网

先配置好adb环境变量,打开模拟器,cmd中输入adb shell 查看是否adb配置完成,exit退出adb模式,adb root将模拟器root,然后adb shell,可以直接setprop net.eth0.dns1 192.168.1.1 后面为自己ip地址
暂无图片
编程学习 ·

Go map的概念及三种使用方法

map的概念map 的基本介绍map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合,基本语法var map 变量名 map[keytype]valuetypekey 可以是什么类型golang 中的 map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel , 还可以是只包…
暂无图片
编程学习 ·

vue中的keep-alive使用总结

在平常开发中,有些组件只需要加载一次,后面的数据将不存在变化,亦或者是组件需要缓存状态,滚动条位置等,这个时候,keep-alive的用处就立刻凸显出来了。1.App.vue中使用keep-alive,include表示需要缓存的页面,exclude表示不需要缓存的页面,你可以只设置其中一个即可,但…
暂无图片
编程学习 ·

跟汤老师学Java笔记: 流有哪三种分类方式

跟汤老师学Java笔记: 流有哪三种分类方式 完成:第一遍 1… 流有哪三种分类方式? 三类: 按流的方向(按内存为中心)分类: 输入流:用于读取数据,比如从文件中读取数据到程序中,由InputStream和Reader作为父类 输出流:用于写出数据,比如将程序中的数据写出到文件中,由…
暂无图片
编程学习 ·

[剑指offer]二叉搜索树的后序遍历数列

[剑指offer]二叉搜索树的后序遍历数列 剑指offer-二叉搜索树的后序遍历序列 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:5/ \2 6/ \1 …
暂无图片
编程学习 ·

二叉搜索树与双向链表

题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 package hk;import java.util.ArrayList;public class Solution {public TreeNode Convert(TreeNode pRootOfTree) {if (pRootOfTree==null){r…
暂无图片
编程学习 ·

剑指Offer 10-| 学习笔记

剑指Offer 10-| 学习笔记 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模…
暂无图片
编程学习 ·

Chen08

[Calendar] 实例化Calendar Calendar c = Calendar.getInstance(); 月份是从0开始计数的(0-11) c.set();//日历设置到某一天 c.get();//日历翻到的那一天BigInteger 表示整数、 BigDecimal表示浮点数 对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类, DecimalForm…
暂无图片
编程学习 ·

Linux学习日记 7.1 (用户)

MOOC链接 一。什么是用户和用户组 1.用户 UID (User‘s ID)是识别用户权限的标识,用户登陆系统所处的角色是通过UID来实现的,而非用户名,因此,每个用户的UID必须是唯一的。 Linux中的用户分成三类 ※ 系统管理员用户:拥有整个系统所有的权限,只能有一个,即根用户root,…
暂无图片
编程学习 ·

hadoop(三)hdfs的NameNode和DataNode工作机制

文章目录1. NameNode和SecondaryNameNode(面试开发重点)1.1 NN和2NN工作机制1.1.1引言1.1.2 具体工作机制介绍1.1.3 NN和2NN工作机制详解:1.2 Fsimage和Edits解析1.2.1oiv查看Fsimage文件1.2.2oev查看Edits文件1.3 chkpoint时间设置1.4 NameNode故障处理1.5 集群安全模式1.…
暂无图片
编程学习 ·

Vue + Alioss前端上传图片

Vue + Alioss前端上传图片准备工作安装依赖js工具类封装使用end 准备工作 需要注册一个ali云申请accesskeys,具体的操作请参考 link. 安装依赖 npm install ali-ossjs工具类封装 let OSS=require(ali-oss);let client=new OSS({accessKeyId: 你创建的Bucket时获取的accessKey…
暂无图片
编程学习 ·

《ES6模块化》知识点总结

以下内容纯属个人扯淡,仅供参考目录一、概述二、基本语法一、概述1、传统开发模式的问题命名冲突:多个js文件之间,不能存在同名的变量 文件依赖:js文件之间无法实现相互引用2、模块化1。概述将单独的一个功能封装到一个模块文件中,模块之间相互隔离,但可通过特定的接口公…
暂无图片
编程学习 ·

PCA(1):基础知识介绍

PCA算法思路:首先利用样本集及特征构建一个样本矩阵,然后利用样本矩阵计算得到一个协方差矩阵,再计算协方差矩阵的特征值和特征向量,保留特征值前k个大的对应的特征向量作为新的维度方向,再将原始样本数据转换到新的空间维度。(他非常巧妙地利用协方差矩阵来计算出样本集…