1.排序
1.1将数组元素正序(从小到大)排列
1、Arrays.sort(int[] a)
这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
2、Arrays.sort(int[] a, int fromIndex, int toIndex)
这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,
注意:下标为toIndex的元素不参与排序哦!
1.2数组反转
package kuaisupaixu;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
//数组排列
Arrays.sort(arr);//13,24,57,69,80
//将数组按照从大到小的顺序排列
/*//第一种方法:数组正序排列后将数组从最后一个开始遍历
int[] brr=new int[5];
for (int i = arr.length-1,j=0; i >=0 ; i--,j++) {
brr[j]=arr[i];
System.out.print(brr[j]+"\t");
}*/
//第二种
for (int i = 0; i < arr.length/2 ; i++) {
int temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
for (int i = 0; i < arr.length ; i++) {
System.out.print(arr[i]+"\t");
}
}
}
2.二分查找
package erfenchazhao;
/**
* @author Lynn
* @create 2020-12-05-18:07
*/
public class Test {
public static void main(String[] args) {
//二分查找
//前提:所要查找的数组必须有序
int[] arr = {-99, 47, 5, 6, -32, 8, 1, 54};
//要查找的数--8
int dest = 9;
int head = 0;//初始的首索引
int end = arr.length - 1;//初始的末索引
boolean flag=true;
while (head <= end){
int middle=(head+end)/2;
if (dest==arr[middle]){
flag=false;
System.out.println(dest+"的索引值为:"+middle);
break;
}else if(arr[middle]>dest){
end=middle-1;
}else {
head=middle+1;
}
}
if(flag){
System.out.println("没有这个数!");
}
}
}
3.冒泡排序
原理:对一个数组的元素两两(相邻的)进行比较,最大的数放在数组最右边
package maopaopaixu;
import java.security.PublicKey;
/**
* @author Lynn
* @create 2020-12-05-14:18
*/
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 57, 13};
System.out.println("排序前:" + arrToString(arr));
/*
//第一次比较--arr.length-1防止索引越界
for (int i = 0; i < arr.length-1-0; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第一次比较后:"+arrToString(arr));
//第二次比较--arr.length-1-1第一次比较后,最后一个数不用再次比较
for (int i = 0; i < arr.length-1-1; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第二次比较后:"+arrToString(arr));
//第三次比较--arr.length-1-2第二次比较后,最后两个数不用再次比较
for (int i = 0; i < arr.length-1-2; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第三次比较后:"+arrToString(arr));
//第四次比较--arr.length-1-3第三次比较后,最后三个数不用再次比较
for (int i = 0; i < arr.length-1-3; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
System.out.println("第四次比较后:"+arrToString(arr));*/
//代码优化
//外层for循环是需要比较的次数: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]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后:"+arrToString(arr));
}
//把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2····]
public static String arrToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(",");
}
}
sb.append("]");
return sb.toString();
}
}