冒泡排序
思想:
1、两两比较,如果前面的数比后面的数大,就交换。经过一轮后,最大的数就在最后面了。
2、经过 n - 1 轮后,排序完成
代码:
public class Demo1_Sort {
public static void main(String[] args) {
//冒泡排序
int[] arr = {11, 22, 15, 9};
BubbleSort(arr);
for(int a : arr) {
System.out.print(a + " ");
}
}
public static void BubbleSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
for(int j = 1; j < arr.length - i; j++) {
if(arr[j - 1] > arr[j]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
}
}
输出:
9 11 15 22
选择排序
思想:
1、用一个索引位置上的元素,依次与其它索引位置上的元素比较,小的在前面,大的在后面。
2、比较n - 1 次即可
代码:
public class Demo2_Sort {
public static void main(String[] args) {
//选择排序
int[] arr = {11, 22, 9, 0, -5, 56, 100};
selectSort(arr);
for(int a : arr) {
System.out.print(a + " ");
}
}
private static void selectSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
for(int j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
输出:
-5 0 9 11 22 56 100
二分查找
二分查找的前提:数组有序!!
思想:
每次找最中间的值,不管大了还是小了,都会砍掉一半的数,缩小查找范围
代码:
import com.heima.sort.*;
public class Demo1_Search {
public static void main(String[] args) {
//二分查找
int[] arr = {11, 23, 0, -5, 98, 45, 22};
Demo1_Sort.BubbleSort(arr);
for(int a : arr) {
System.out.print(a + " ");
}
System.out.println();
System.out.println(binarySearch(arr, 98));
}
private static int binarySearch(int[] arr, int num) {
int left = 0;
int right = arr.length - 1;
int mid;
while(left <= right) {
mid = (left + right) / 2;
if(arr[mid] > num) {
right = mid - 1;
}else if(arr[mid] < num) {
left = mid + 1;
}else {
return mid;
}
}
return -1;
}
}
输出:
-5 0 11 22 23 45 98
6