冒泡排序
思路:
假设数组的长度是length
请问该数组一共需要比较几趟,length-1
请问个数组第一趟需要比较几次,length - 1
请问个数组第二趟需要比较几次,length - 1 - 1
请问个数组第三趟需要比较几次,length - 1 - 2
…
public class BubbleSortDemo {
public static void main(String[] args) {
// 假设数组的长度是length
// 请问该数组一共需要比较几趟,length-1
// 请问个数组第一趟需要比较几次,length - 1
// 请问个数组第二趟需要比较几次,length - 1 - 1
// 请问个数组第三趟需要比较几次,length - 1 - 2
//1.定义数组
int[] arr = {34,5,678,2423,645,6345,36346,54786,344};
//2.使用冒泡
//外层循环,控制需要比较的几趟
for (int i = 0; i < arr.length - 1; i++) {
//内层循环,控制比较次数
for(int j = 0; j < arr.length - 1 - i;j++){
//比较相邻元素
//arr[j] arr[j+1]
//如果前面数 > 后面数
if (arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//3.打印
System.out.println(Arrays.toString(arr));
}
}
选择排序
选择排序就好像是抓住一个羊薅羊毛,薅完了在换一个
认定一个元素跟其他所有元素依次进行比较,比较完毕后在换另外一个元素跟其他所有元素依次进行比较
public class Test02 {
public static void main(String[] args) {
int[] arr = {1, 2, 432, 32, 54, 32, 3, 7, 657, 563, 25, 43, 6, 463, 52};
// 用“选择排序”对数组元素“降序”排序;打印排序后的数组。\
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] < arr[j]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
二分法
使用二分法的话前提是将数组进行排序好
不一定非得使用冒泡排序,只要排序好就可以
public class Test03 {
public static void main(String[] args) {
int[] arr = {431, 54, 25, 25, 26, 45, 2, 4, 65, 3, 64, 6, 46, 7, 54};
// 使用冒泡排序对元素进行排序;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
int result1 = indexSearch(25, arr);
System.out.println(result1);
int result2 = indexSearch(200, arr);
System.out.println(result2);
}
public static int indexSearch(int target, int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int middle = (right + left) / 2;
if (arr[middle] == target) {
return middle;
} else if (arr[middle] < target) {
left = middle + 1;
} else {
right = middle - 1;
}
}
return -1;
}
}