冒泡排序:
原理:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。
package org.westos.Demo;
public class MaoPaoDemo {
public static void main(String[] args) {
int[] arr = { 6, 2, 5, 3, 7, 8 };
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]) { // y < arr.length-1 防止角标越界异常
int temp = arr[j]; // y < arr.length-1 -x 避免重复比较
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int x = 0; x < arr.length; x++) {
System.out.print(arr[x]+" ");
}
}
}
简单选择排序:
简单选择排序原理: 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
package org.westos.Demo;
// 选择排序原理
// 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
public class jiandanpaixu {
public static void main(String[] args) {
int[] arr = { 2, 5, 3, 1, 6, 4, 8 };// 对数组进行静态初始化
for (int i = 0; i < arr.length - 1; i++)// 外层循环控制机比较的次数
for (int j = i + 1; j < arr.length; j++) {// 内层循环控制比较的元素
if (arr[i] > arr[j]) {// 如果arr[i]大于arr[j]交换
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
for (int x = 0; x < arr.length; x++) {// 遍历排序好的
System.out.print(arr[x] + " ");
}
}
}
二分法查找
二分法查找原理:数据必须有序排列。先从中间开始查找,若中间的数据值与想要查找到值相等,则查找成功。若中间值大于所查找的值,将最后的max移向mid得前一个位置。如果小于所查找的值,将最前面的min移向mid的前一个位置。不断重复着一项操作,直到找到为止。
package org.westos.Demo;
public class erfenfa {
public static void main(String[] args) {
int[] arr = { 1, 2, 4, 6, 8, 9 };// 定义一个静态数组
int number = 6;// 查找的值为6
int min = 0;// 最小边界
int max = arr.length - 1;// 最大边界
int mid = (min + max) / 2;// 中间
// 循环查找指定值的位置
while (arr[mid] != number) {
if (arr[mid] > number) {
// 范围在左边,更新最大值
max = mid - 1;
} else {
// 范围在右边, 更新最小值
min = mid + 1;
}
// 判断查找范围
if (min > max) {
mid = -1;// 没找到
break;
}
// 更新中间值 mid
mid = (min + max) / 2;
}
System.out.println("您查找的值在第" + mid + "个位置");
}
}