众所周知,选择排序,冒泡排序以及二分查找在我们的C语言Java语言中是必会选项,当然,我相信在以后的生活工作中,我们遇见他们仨的机会应该有很多。从小学的1+1=2到高中的排列组合再到大学的常微分,也可以理解为对一个人知识体系或者知识架构的接受能力的排序,那么我们对于已学知识的回忆可以选择二分查找的形式,只要你能,大脑思维便会尽你所能!
话不多说,我们来扯下他们仨的肚兜。ps:(小编为男,我认为他们仨也是男。)
- 在一个类中分别实现他们
import java.util.Arrays;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
int arr[] = { 2, 4, 3, 9, 7, 6, 0, 8 };
// 选择排序(升序):
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {//如若要进行降序排列,则将if后括号中变为(arr[i] < arr[j])即可
int temp = arr[i];//引入第三方变量方便两值得交换
arr[i] = arr[j];
arr[j] = arr[i];
}
}
}
System.out.println(Arrays.toString(arr));`
// 冒泡排序(升序):
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {//如若要进行降序排列,则将if后括号中变为(arr[i] < arr[j])即可
int temp = arr[j]; //引入第三方变量方便两值得交换
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
//二分查找(键盘输入想查找索引的值):
int arr1[] = { 1, 2, 4, 6, 7, 8, 9 };//对于要进行二分查找得数组,要求是必须为升序或者降序排列的数组
int start = 0;
int end = arr1.length - 1;
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的值:");
int key = sc.nextInt();
while (start <= end) {//考虑指针重合的可能
int midIndex = (end + start) / 2;//求出数组中间索引
int m = arr1[midIndex];//中间索引所对应的数组元素值,并赋值给m
if (key < m) {
end = midIndex - 1;//如果要查找的值比中间索引对应的值小,就将末指针换为midIndex - 1
} else if (key > m) {
start = midIndex + 1;//如果要查找的值比中间索引对应的值大,就将初指针换为midIndex + 1
} else {
System.out.println(midIndex);
return;
}
}
System.out.println("查无此数!");
}
}
以上就是我们选择排序和冒泡排序以及二分查找的具体过程,接下来,我们对以上内容进行优化:
-
1:对以上方法进行封装,在其他类有需要时可以随便调用。
-
2:对于选择排序以及冒泡排序我们使用一个程序就可以选择对他进行升序或者降序排列。
-
[ 1] 创建封装类:
public static void sortArray(int arr[], boolean flag) {//传入数组,并传入flag(flag代表true或false)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (flag ? arr[i] > arr[j] : arr[i] < arr[j]) {//三目运算,flag为true执行arr[i] > arr[j]为升序,否则后边个为降序
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
/*
* 冒泡排序
*/
public static void bubbArray(int arr[],boolean flag){//传入数组,并传入flag(flag代表true或false)
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(flag?arr[j]>arr[j+1]:arr[j]<arr[j+1]){//三目运算,flag为true执行arr[i] > arr[j]为升序,否则后边个为降序
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
System.out.println(Arrays.toString(arr));
}
/*
* 二分查找
*/
public static void binarySearch(int arr[],int key){//输入数组,并传入要查找的值
int start=0;
int end=arr.length-1;
while (start<=end) {
int midleIndex=(start+end)/2;
int m=arr[midleIndex];
if (key==m) {
System.out.println(midleIndex);
return ;
}else if (key>m) {
start=midleIndex+1;
}else {
end=midleIndex-1;
}
}
System.out.println("无此数!");
}
- [2 ] 创建一个测试类:
package Day12;
import java.util.Arrays;
import ArrayUtill.ArrayUtil;
public class Text {
public static void main(String[] args) {
int arr[]={5,6,8,15,0,12,7};
ArrayUtil.bubbArray(arr, true);//冒泡
ArrayUtil.sortArray(arr, false);//选择
int arr1[]={2,3,6,7,8,9};
ArrayUtil.binarySearch(arr1,6); //二分查找
}
}
熟悉以上方法后,既可以节省我们编写程序的时间,还可以灵活掌握我们传参与调用!
OK,就说到这儿了,再会!