排序是指将多个数据,按指定的顺序进行排列的过程。
冒泡排序法:通过比较两个相邻的数的大小(如果前面的数大于后面的数就进行交换 / 后面的数大于前面的数就进行交换 ),来进行一个数组的排序,使整个数组中的数据按 从小到大/从大到小 的顺序进行排序。
案例:
将五个无序的数:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。
数组[24,69,80,57,13]
第一轮循环:目标是把最大的数放到数组最后位置
第1次比较 [24,69,80,57,13]
第2次比较 [24,69,80,57,13]
第3次比较 [24,69,57,80,13]
第4次比较 [24,69,57,13,80]
第二轮循环:目标是把第二大的数放到数组倒数第二位置
第1次比较 [24,69,57,13,80]
第2次比较 [24,57,69,13,80]
第3次比较 [24,57,13,69,80]
第三轮循环:目标是把第三大的数放到数组倒数第三位置
第1次比较 [24,57,13,69,80]
第2次比较 [24,13,57,69,80]
第四轮循环:目标是把第三大的数放到数组倒数第四位置
第1次比较 [13,24,57,69,80]
执行代码:
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {24 , 69 , 80 , 57 , 13};
int temp; //用于辅助变量交换
// 先死后活 => 4就是 arr.length - 1
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]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
System.out.println("\n ===第" + (i + 1) + "轮");
for(int j = 0; j < arr.length ; j++) {
System.out.print(arr[j] + "\t");
}
}
}
}
运行结果:
分析:
1)一共有五个元素,进行了四轮循环
2)每一轮的循环都可以确定一个数的位置,比如第一轮循环确定了最大的一个数,第二轮循环确定了第二大的数……
3)当进行比较时,只要前面的数大于后面的数就进行交换
4)每轮的比较次数在减少,4 => 3 => 2 => 1,因为每轮都会确定一个数的位置
在java中,常用的查找有两种:
1)顺序查找
2)二分查找
案例:
有一个数列:{"java" , "python" , "golang"}; 从键盘输入一组字符串 判断数列中是否包含此字符串(顺序查找) 要求:如果找到了,就提示找到,并给出下标值 ; 没找到就给出提示
思路: 1. 定义一个字符串数组 2. 接收用户输入,遍历数组,逐一比较,如果有,则提示信息,并退出
直接上代码:
import java.util.Scanner;
public class SeqSearch {
public static void main(String[] args) {
//定义一个字符串数组
String[] names = {"java" , "python" , "golang"};
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入字符串:");
String findName = myScanner.next();
//遍历数组,逐一比较,如果有则提示信息并退出
//判断有没有成功可以用一个 索引/标识符/标记 等
int index = -1; //不能为 i - names.equals 间的数
for(int i = 0; i < names.length ; i++) {
//比较字符串 equals , 如果要找到名字就是当前元素
if(findName.equals(names[i])) {
System.out.println("恭喜你找到了" + findName);
System.out.println("下标为:" + i);
// 将i保存到index
index = i;
break; // 退出
}
}
if(index == -1) {
System.out.println("sorry , 没有找到" + findName);
}
}
}
输出结果为:
可以看出在找到字符串后便会提示找到并且输出该字符串的下标。
未找到便会提示 sorry,没有找到。