Java数组常用算法(2):查找、排序

本文详细介绍了Java中数组的查找算法,包括线性查找和二分查找,以及排序算法如冒泡排序和快速排序的实现过程及其应用实例。通过实例演示了如何在有序和无序数组中查找特定元素,以及如何保持稳定性地对数组进行排序。
摘要由CSDN通过智能技术生成

  

目录

一、Java数组的查找

1.线性查找代码实现

2.运行线性查找代码输出结果

3.二分法查找(基于排序):

    输出结果1)存在于数组中的值

    输出结果2)不存在于数组中的值

二、Java数组的排序

1.冒泡排序(包含交换算法)

2.快速排序


上一篇:Java数组常用算法(1):复制、反转_SleepLeaf的博客-CSDN博客

  

  

  

一、Java数组的查找

1.线性查找代码实现

(使用到了String类的功能:.equals())

public class LinearSearch {
	
	public static void main(String[] arg){
	
		String[] profession = new String[]{"mage","warrior","hunter","priest","rogue"};
	
		boolean seFlag = false;
	
		String select = "mage";
		//select = "warlock";
	
		for(int i =0 ; i < profession.length ; i++){
			if(select.equals(profession[i])){
				System.out.println("已选择职业:" + i + ":" +profession[i]);
				seFlag = true;
				break;
			}
		}
		if(seFlag == false)
		System.out.println("该职业不可选!");
	}
}

2.运行线性查找代码输出结果

输出结果1)

输出结果2)

3.二分法查找(基于排序):

代码实现 1)

public class BinarySearch {
	public static void main(String[] args) {
		//定义一个数组
		int[] score = new int[]{102,320,1000,7998,10248,12340,12588};
		//定义三个工具变量
		int start = 0;
		int end = score.length -1;
		int mid;
		//使用二分法查找
		boolean deFlag = false; //是否找到,找到为true,未找到到为false
		int dest = 1001;//要查找的目标值
		while(start != end){
			mid = (start + end) / 2;
			if(score[mid] != dest){
				if(score[mid] > dest){
					end = mid -1;	//缩小查找范围,去除当前范围后半部分
				}else{
					start = mid + 1;	//缩小查找范围,去除当前范围前半部分
				}
				continue;	//未找到目标时跳转到循环开头
			}
			deFlag = true;
			System.out.println("目标" + dest +"已在" + mid +"找到");
			break;	//目标已找到,退出循环
		}
		if(deFlag == false){
			System.out.println("目标不存在!");
		}
	}
}

 输出结果1)存在于数组中的值

输出结果2)不存在于数组中的值

二、Java数组的排序

排序的额外要求:稳定性(对于同大小的元素保留原有前后顺序)

1.冒泡排序(包含交换算法)

代码实现:

public class BubbleSort {
	public static void main(String[] arg){
		//定义一个数组
		int[] score = new int[]{1688,588,9988,20,2500,6500,198};
		
		//使用for循环进行冒泡排序(从小打到)
		for(int i = 0 ; i < score.length -1 ; i++){
			for(int j = 0 ; j < score.length -1 - i ; j++){
				if(score[j] > score[j+1]){
					int temp = score[j];
					score[j] = score[j+1];
					score[j+1] = temp;
				}
			}
		}
		//输出排序后的结果
		System.out.println("从小到大排序:");
		for(int i = 0 ; i < score.length ; i++){
			System.out.print(score[i] + "\t");
		}
	}
}

 输出结果:

2.快速排序

1)整体思路:

        选择一个数组中的元素作为基准,大于基准的数放右边,小于基准的数放左边。再分别对数组左右两边的部分重复上面的操作,直到无法再分。

2)实现按基准元素左右划分:

        定义两个变量作为移动标签:low、high

        low从左往右移动,所处的变量大于基准时停下;high从右往左移动,所处变量小于基准时停下。当两个移动标标签都停下时,交换两标签所在位置的元素。直到low标签移动到high标签的右边时停止操作。此时将基准元素与high标签位置的元素交换位置。

        到这时,基准左边的元素都是小于基准的,而基准右边的元素都是大于基准的。

-------------------------------------------完结✿✿ヽ(°▽°)ノ✿-----------------------------------------------

谢谢观看!

欢迎评论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值