一:冒泡排序(升序版本,降序将>,< 互换.思路:一个数先和后面这个数比,如果大,就位置调换,依次比较,第一轮比较完毕,可以找到最大的数)
import java.util.Arrays;
public class SortTest {
public static void main(String[] args) {
int[] nums = {-8, 2, 0, -1, 0, 9};
// 打印排序前的数组
System.out.println("排序前:" + Arrays.toString(nums));
//冒泡排序 第一次可以比较出来 最大的数字
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
// -1-i -1是为了防止数组越界
//-i 是为了减少循环次数 i进来一次 j循环一遍
// 排除掉自己和自己的比较过程
//升序排序(由小到大) 前一个元素比后一个元素 值大
//数组可能越界
if (nums[j] > nums[j + 1]) {
//交换 需要第三方变量来帮助
//右值给左值
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
System.out.println("排序后:"+Arrays.toString(nums));
System.out.println("❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀");
/**实际应用,可以使用Arrays提供好的方法
* 只提供了升序
*/
Arrays.sort(nums);
System.out.println("通过Arrays的方法排序后的结果:"+Arrays.toString(nums));
/**
* 在实际开发中想要降序排序,手动编写
* 方式1: 先用Array.sort 排序后在倒序输出
* 方式2: 冒泡排序 条件修改为<
*/
for (int i = nums.length-1; i >=0 ; i--) {
System.out.print(+nums[i]+",");
}
}
}
二:折半查找:(先找中间的数,如果比这个中间的小,最后一个数就变成中间的数字,如果比中间这个数字大,那么开始的第一个数字就变成中间的数,前提这是数组现在已经排好顺序的)
public class ZheBanTest {
public static void main(String[] args) {
int[] nums = {-8, 0, 2, 1, 0, 9};
//对指定的数组进行排序
Arrays.sort(nums);
Scanner sc = new Scanner(System.in);
System.out.println("输入你要获取的元素:");
int num = sc.nextInt();
//假设 元素不存在 其位置为-1
int index = -1;
//分别定义 数组的开始和结束位置
int begin = 0;
int end = nums.length - 1;
//重复的多次对数组进行折半操作 使用while循环
while (begin <= end) {
//根据开始位置和结束位置计算折点位置
int middle = (begin + end) / 2;
//先 判断输入的数与折点位置上的数的关系
if (num == nums[middle]) {
// 将 折点位置 赋值给 index
index = middle;
//此时 已经找到了 不用在判断了
break;
} else if (num > nums[middle]) {
//开始位置 改变
begin = middle + 1;
} else {
end = middle - 1;
}
}
System.out.println((index != -1) ? ("元素存在") : ("元素不存在"));
sc.close();
}
}