冒泡排序
冒泡排序概述:
- ⼀种排序的⽅式,对要进⾏排序的数据, 相邻的数据进⾏两两⽐较,将较⼤的数据放在后⾯,依次对所有的数据进⾏操作,直⾄所有数据按要求完成排序
- 如果有n个数据进⾏排序,总共需要⽐较n-1轮 每⼀轮⽐较完毕,下⼀轮的⽐较就会少⼀个数据参与
代码:
public class ArrayDemo {
public static void main(String[] args) {
//定义⼀个数组
int[] arr = {7, 6, 5, 4, 3};
System.out.println("排序前:" +
Arrays.toString(arr));
// 这⾥减1,是控制每轮⽐较的次数
for (int x = 0; x < arr.length - 1; x++) {
// -1是为了避免索引越界,-x是为了调⾼⽐较
效率
for (int i = 0; i < arr.length - 1 - x; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
System.out.println("排序后:" +
Arrays.toString(arr));
}
}
选择排序
选择排序概述:
- 另外⼀种排序的⽅式,从头开始选中数组元素,与其后⾯的元素依次进⾏两两⽐较,将较⼤的数据放在后⾯,依次从前到后选中每个元素,直⾄所有数据按要求完成排序
-
如果有 n 个数据进⾏排序,总共需要⽐较 n-1 轮
-
每⼀轮⽐较完毕,下⼀轮的⽐较就会少⼀个数据参与
代码:
public class xuanzepaixu {
public static void main(String[] args) {
int [] arr = {70,2,15,46,7,95};
for (int i = 0; i <arr.length-1 ; i++) {
//假设这个是最小的
int min = i;
//找出最小的索引
for (int j = i+1; j < arr.length ; j++) {
if (arr[min]>arr[j]){
min=j;
}
}
if (min!=i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
二分查找
原理:
-
每⼀次都去获取数组的中间索引所对应的元素,然后和 要查找的元素进⾏⽐对,如果相同就返回索引
- 如果不相同,就⽐较中间元素和要查找的元素的值
-
如果中间元素的值⼤于要查找的元素,说明要查找的元素在左 侧,那么就从左侧按照上述思想继续查询( 忽略右侧数据 )
-
如果中间元素的值⼩于要查找的元素,说明要查找的元素在右 侧,那么就从右侧按照上述思想继续查询( 忽略左侧数据 )
代码:
public class Test1 {
public static void main(String[] args) {
int [] arr ={1,2,3,4,5,6,7,8,9};
System.out.println(Demo(2,arr));
}
public static int Demo(int n, int []arr){
//定义一个开头
int end =0;
//定义一个结尾
int and = arr.length-1;
//每次进来开头会小于等于结尾
while (end<=and){
//开头的值加结尾的值除2求中间值
int n1 = (end+and)/2;
//如过中间数比我要找的数小,就要加10
if (arr[n1]<n){
end = n1+1;
//如过中间数比我要找的数大,就要减1
}else if (arr[n1]>n){
and = n1-1;
//相等就把我找到的下表给返回
}else if (arr[n1]==n){
return n1;
}
}
//如果没找到就返回-1
return -1;
}
}