二分法查找:(前提: 1,数值型数组; 2,必须 ---升序或降序)

public static int find(int[] arr,int val) {
//查找--下标
int start=0;
int end=arr.length-1;
int mid=(start+end)/2;
while(start<end) {
if(arr[mid]==val) {
return mid;
}else if(arr[mid]>val) {
end=mid-1;
}else {
start=mid+1;
}
mid=(start+end)/2;//更新中间位置下标
}
return -1;//没找到
}
冒泡排序:

//冒泡排序:内层重复循环
public static void bubbleSort(int[] arr) {
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]) {
arr[j]=( arr[j+1] = arr[j]+arr[j+1] )-arr[j];//a=和-a
arr[j+1]=arr[j+1]-arr[j];//b=和-b
}
}
}
}
选择排序:

//选择排序: 从前往后,保存最大的值
private static void selectSort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length-1; j++) {
//取出外层的值--挨次比较大小,收取单次循环的最大值
if(arr[i]<arr[j]) {
arr[j]=( arr[i] = arr[i]+arr[j] )-arr[j];//a=和-a
arr[i]=arr[i]-arr[j];//b=和-b
}
}
}
}

//选择排序: 优化版
private static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int maxIndex=i;//默认下标i处: 为max
for (int j = i + 1; j < arr.length - 1; j++) {
// 取出外层的值--挨次比较大小,收取单次循环的最大值
if (arr[i] < arr[j]) {
if(arr[maxIndex]<arr[j]) {
maxIndex=j;//保存: 最大值的下标
}
}
} // 内for
// 判断: 是否发生了比较: index是否变化---交换两个值
if(maxIndex!=i) {
arr[maxIndex] = (arr[i] = arr[i] + arr[maxIndex]) - arr[maxIndex];// a=和-a
arr[i] = arr[i] - arr[maxIndex];// b=和-b
}
}//外for
}
本文介绍了几种常见的排序算法(冒泡排序、选择排序)及其优化,并详细讲解了二分查找算法的实现过程。这些算法适用于数值型数组且数组需预先排序。
1062

被折叠的 条评论
为什么被折叠?



