1、冒泡排序
概念:
就是将前面的一个数和后面的一个数进行比较。如果前面的大于后面的,那么就用一个盒子装一下其中一个数,从而实现互相交换位置。以此类推,一直将数据比较完为止。
使用双重for循环实现:
外层控制有多少数字要循环的次数,内层控制每次前后相比较的情况,内层一直要到后面的数比前面数大才停止
public static void main(String[] args) {
int[] arr={5,3,2,7,1,6,8,4,9};
//外层循环整个数组有多少个数
for (int j = 0; j <arr.length ; j++) {
//遍历的次数是比原数组的长度少一个的(不然判断的时候会造成索引越界的问题)
for (int i = 0; i <arr.length-1 ; i++) {
//如果遍历出来的这个数大于后面的数就将他们交换位置。如果不比前面的大,就不做事,进行下一次外层循环
if(arr[i]>arr[i+1]){ //比较前后两个数
//定义盒子
int temp=arr[i];
//将后面的数放到前面去
arr[i]=arr[i+1];
//在将前面的放到后面去
arr[i+1]=temp;
}
}
}
2、二分查找
注意:
二分查找的前提是一组数据是有序排列的(从大到小或从小到大)。
概念:
定义最大索引、最小索引、以及中间索引。
将要查询的这个数和这组数据的中间索引做比较,如果大于中间索引就表示在中间索引这个位置的右边,那么就需要改变最小索引的位置,最大索引不变。如果这个数是在中间索引的左边,那么需要改变的就是最大索引,最小索引不变。如果最终这个数和中间索引相等,那么这个数的位置就等于中间索引的位置。每次循环都应该重新定义中间索引,因为每次循环完最大和最小索引总要变化一个。
public static void main(String[] args) {
int[] i={1,2,3,4,5,6,7,8,9};
int num=binSearch(i,1);
System.out.println(num);
}
static int binSearch(int[] arr,int i){
//最大索引; 相当于数组的最大长度-1 就是最大索引
int maxIndex=arr.length-1;
//最小索引
int minIndex=0;
//中间索引
int halfIndex=(maxIndex+minIndex)/2;
while (maxIndex>=minIndex){
//当遍历的这个数等于中间索引,就表示要找的就是这个数
if(arr[halfIndex]==i){
return halfIndex; //返回中间索引(等于这个数)
}else if (arr[halfIndex]<i){ //中间索引的数要小于那个属的时候,表示就在中间索引的右边
//变化的是最小索引 最大索引不变;这时候的最小索引就是上一次的中间索引+1
minIndex=halfIndex+1;
}else{//否则这个数就小于中间索引的数,就在中间索引的左边
//变化的是最大索引; 这时的最大索引就是上一次的中间索引-1
maxIndex=halfIndex-1;
}
//每次要进行下次循环的时候,中间索引都应该重新定位 (因为最大或最小索引至少要变化一个)
halfIndex=(maxIndex+minIndex)/2;
}
return -1;//表示没找到; 如果查找的这个数不在这堆数据里面,就返回-1
}
3、文字交换
public static void main(String[] args) {
char[] arr = {'赵','兄','托','我','帮','你','办','点','事'};
//将数据的一半进行循环
for (int i=0;i<arr.length/2;i++){
//将第一个数放到盒子里面
char a = arr[i];
//把最后一个数和第一个数进行交换
arr[i] = arr[(arr.length-i)-1];
arr[(arr.length-i)-1] = a;
}
System.out.println(Arrays.toString(arr)); // 打印:*********
}