1.冒泡排序
public static void main(){//降序排列
int[] arr = {15,6,8,9,4};
bubblesort(arr);
for(int i = 0;i<arr.length:i++){
System.out.println(arr[i]);//输出结果 15 9 8 6 4
}
}
public static void bubblesort(int arr){
for(int i = 0; i<arr.length;i++){
//每一次的比较就不用和最后一个位置比较 可以优化为 -1-i 减少比较次数
for(int j = 0;j<arr.length-1-i;i++){
if(arr[j] < arr[j+1]){
int temp = arr[j];//交换过程
arr[j] = arr[j+1];
arr[j+1] = temp
}
}
}
}
2.选择排序
//选择排序
public static void main(String[] args) {
int[] arr = {15,6,8,9,4};
Selectsort(arr);
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);//输出结果 15 9 8 6 4
}
}
public static void Selectsort(int[] arr){
int index;
for (int i = 0; i < arr.length; i++) {
//算法的基本想法 让index的每一个位置和后面的相比,找到最大的
//放在index的位置
index = i;
//为啥要使用index这个变量,防止在下面对i进行的操作改变了i的值
for (int j = i+1; j < arr.length; j++) {
//因为做好一次循环,一定可以保证前i个位置一定是排序好的,不用再比较
//j = i + 1 可以有效的减少比较次数
//在后面找到一个比index所在位置更大的数,交换
if (arr[index] < arr[j]) {
int temp = arr[index];
arr[index] = arr[j];
arr[j] = temp;
}
}
}
}
3.折半查找
public class Binary01 {
//折半查找的可以大大提升效率,每一次几乎都砍掉一般的序列
//但是在进行折半查找时必须要求,待查找的序列要有序才可以
public static void main(String[] args) {
int[] arr = {1,3,5,6};
int target = 3;
System.out.println(Binary(arr, target));
}
public static int Binary(int[] arr,int target){//以升序为例
int low = 0;//起始位置
int high = arr.length - 1;//终止位置
while( low <= high){ //循环条件
int mid = (low+high)/2; //中间位置
if(arr[mid] > target){//当中间变量的值大于目标值的时 mid的右边可以不比较了
high = mid-1;//就可以让high移动到mid的左侧一个
}else if (arr[mid] <target) {///当中间变量的值小于目标值的时 mid的左边可以不比较了
low = mid+1;//就可以让low移动到mid的右侧一个
}else
return mid; //找到 returnmid就可以
}
return -1; //没找到
}
}
4.顺序查找
public class Sequential01 {
//顺序查找
//依次比较就可以了
public static void main(String[] args) {
int[] arr = {1,3,5,6};
int target = 3;
System.out.println(Sequential(arr, target));
}
public static int Sequential(int[] arr,int target){
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
return i;//找到了 就直接返回i
}
}
return -1;//没找到返回-1
}