排序:将一组数据按照固定的规则进行排序
一.冒泡排序:
原理:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,升序时将较大的数据放在后面,降序时将较小的数据放在后面,直至所有数据按照既定的要求完成所有数据排序
实现步骤:1.对要排序的元素进行遍历,两两比较(遍历到的元素与它的后一个元素进行比较),升序时,将大的元素放在右边。
2.遍历到倒数第二个元素时,最大的元素就已经在最右边。
3.重复执行第一步,但是遍历的元素不要上一轮遍历找到的最大的元素。
代码实现:
public class BubbleSorting {
public static void main(String[] args) {
//定义一个需要排序的数组
int[] arr = {56,1,432,32,78,54,32,3,7,657,563,25,43,6,463,52,56};
//打印排序前的数组
System.out.println("排序前:" + Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
//每一轮循环结束下一次循环少遍历一次,所以为(i + 1)
for (int j = 0; j < arr.length - (i + 1); j++) {
//两两比较,遍历的元素大于下一个元素,进行交换
if (arr[j] >= arr[j + 1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}
}
二.二分查找
2.1 二分查找概述
查找指定元素的位置时,传统的方式是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低,而二分查找,每一次可以去掉一半的查找范围,相对于传统的方式提高了效率。
2.2 二分查找实现步骤
要求:查找时已经是排序好的元素(我这实现是基于升序的元素)
实现步骤:1.先定义两个指针min和max,min指向第一个元素,max指向最后一个元素
2.定义一个mid指针,其指向(min + max)/ 2。
3.进行比较,如果要查找的元素等于mid指针所指的元素,返回指针的索引或者元素
4.要查找的元素大于mid指针指向的元素,min指向的位置= mid + 1,mid指针指向的位置 =(max + min) / 2。
5.要查找的元素小于mid指针指向的元素,max指向的位置 = mid - 1 ,mid指针指向的位置=(max + min) / 2。
6.重复执行3,4,5步直至直至找到需要找的元素为止,若查找的过程中min > max说明元素不存在,返回-1。
代码实现:
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {4,5,6,8,9,10,15,16,17,18};
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的数字");
System.out.println(binarySearchIndex(arr,number));
}
public static int binarySearchIndex(int[] arr,int number){
//定义两个变量,表示要查找的范围
int min = 0 ;
int max =arr.length - 1 ;
//循环查找,但是min <= max
while(min <= max ){
//计算出中间索引mid的值
int mid = (min + max) / 2 ;
//判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
if (arr[mid] > number){
//表示的查找的元素在左边
max = mid - 1 ;
}else if (arr[mid] < number){
min = mid + 1 ;
}else{
return mid;
}
}
//如果min大于了max就表示元素不存在,就返回-1
return -1 ;
}
}