冒泡排序
public static void main(String[] args) {
//定义数组
int[] arr = {11,345,675,23,54,65,76,567};
//冒泡排序
//i的取值范围1 2 3 4 5 6 7,代表循环七次
for (int i = 1; i < arr.length; i++) {
//遍历数组
for (int j = 0; j < arr.length-i; 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));
}
选择排序
public static void main(String[] args) {
//创建数组
int[] arr = {11, 345, 675, 23, 54, 65, 76, 567};
//选择排序
//i的取值范围是0 1 2 3 4 5 6,代表循环次数
for (int i = 0; i < arr.length-1; i++) {
//j的取值范围是 第一轮1 2 3 4 5 6 7;
//j的取值范围是 第二轮2 3 4 5 6 7;
//.............
for (int j = i+1; j < arr.length; j++) {
//将数组i个元素与之后的元素进行对比,当存在比i的值小的元素时,将两个元素互换位置
//如此可实现最小的元素在前
if (arr[i]>arr[j]){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
选择排序优化
优点是每次循环只需要交换赋值一次
public static void main(String[] args) {
//创建数组
int[] arr = {11, 345, 675, 23, 54, 65, 76, 567};
//优化选择
//i的取值是0 1 2 3 4 5 6
for (int i = 0; i < arr.length; i++) {
//定义变量min保存最小值的索引
int min = i;
//当i = 0;第一轮;j的取值范围 1 2 3 4 5 6 7
//当i = 1;第二轮;j的取值范围 2 3 4 5 6 7
//..........
for (int j = i + 1; j < arr.length; j++) {
//用min位置的元素和j位置的元素比较
if (arr[min] > arr[j]) {
//记录更小元素的索引
min = j;
}
}
//交换位置
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
//打印
System.out.println(Arrays.toString(arr));
}
二分查找
public static void main(String[] args) {
//创建数组
int[] arr = {11, 22, 33, 44, 55, 66, 77, 88};
//调用方法
System.out.println(getIndex(arr,20));
}
//二分查找获取位置
public static int getIndex(int[] arr,int num){
int i = 0;
int j = arr.length-1;
while (i<=j){
//定义中间索引的变量
int m = (i+j)/2;
if (arr[m]>num){
j = m-1;
}else if (arr[m]<num){
i = m+1;
}else{
return m;
}
}
return -1;
}