一:升序方法
Integer[] array = {1,2,5,7,20,100,30,9,15,14};
//升序方法
// Arrays.sort(array);
// System.out.println(Arrays.toString(array));
二:自定义排序规则
//使用Comparator(比较器)自定义排序规则
Arrays.sort(array, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;//左边大于右边,返回正数,升序
// return -(o1-o2);//降序
}
});
三:冒泡排序
每次从数组中找出最大值放在数组的后面去。
实现冒泡排序的步骤
- 确定一共需要做几轮:数组长度-1.
- 每轮换位
-
public class Maopao { public static void main(String[] args) { int[] arr = {9,5,2,7,1,12,36}; /** *第一轮比较:i=0 , j=6 * 第一次: [5, 9, 2, 7, 1, 12, 3] * 第二次比较:[5, 2, 9, 7, 1, 12, 3] * 第三次比较:[5, 2, 7, 9, 1, 12, 3] * 第四次比较:[5, 2, 7, 1, 9, 12, 3] * 第五次比较:[5, 2, 7, 1, 9, 12, 3] * 第六次比较:[5, 2, 7, 1, 9, 3, 12] * 第一个for循环: * 每一轮只比较位置为j的数字。 * 第二个for循环: * 位置为j的数字每次和后面的数字比,比后面大则换位, * 小则不换,继续下一次比较,下一次的位置为j的数字继续与后面的一位比较。 * 比较到循环结束时停止。开始下一轮的比较 //冒泡排序 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]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } System.out.println(Arrays.toString(arr)); } }
结果为:[1, 2, 5, 7, 9, 12, 36]
四:二分法
二分查找前提是必须排序好的数据。
public class erfenfa {
public static void main(String[] args) {
int[] array = {1, 2, 5, 7, 20, 100, 30, 9, 15, 14};
int row = erfenfa(array, 20);
System.out.println(row);
}
/**
* 二分法查找
*
* @author asus
* @date 2022/6/16
*/
public static int erfenfa(int[] array, int findNum) {
Arrays.sort(array);
System.out.println(Arrays.toString(array));
//定义左边和右边
int left = 0;
int middle = 0;
int right = array.length - 1;
while (left <= right) {
middle = (left + right) / 2;
if (findNum > array[middle]) {
left = middle + 1;
} else if (findNum < array[middle]) {
right = middle - 1;
} else {
return middle;
}
}
return -1;
}
}
结果为:[1, 2, 5, 7, 9, 14, 15, 20, 30, 100]
7