目录
选择排序
-->直接选择排序、堆排序
交换排序
-->冒泡排序、快速排序
插入排序
-->直接插入排序、折半插入排序、Shell排序
归并排序
桶式排序
基数排序
1:冒泡排序
需求一:交换两个变量的值
需求二:用冒泡排序:int[] arr = {2, 5, 7, 3, 1, 12, -12};改变顺序,小到大
public class L1 {
public static void main(String[] args) {
//需求一
/* int a=10;
int b=20;
int temp=20;
b=a;//b=10
a=temp;//a=20
System.out.println("a :" + a +"\n"+ "b :" + b);*/
//需求二
int[] arr = {2, 5, 7, 3, 1, 12, -12};
// 第几轮数
for (int i = 1; i <= arr.length - 1; i++) {
// 相邻的比较
for (int j = 1; j <= arr.length - i; j++) {
if (arr[j - 1] > arr[j]) {
int temp = 0;
temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
2,选择排序
序列中从第一个元素开始和第二个元素开始比较,直到最后一个元素,在从第二个元素开始和第三个元素比较,直到最后个....
需求:用排序算法:int[] arr = {2, 5, 7, 3, 1, 12, -12};改变顺序,小到大
public class L2 {
public static void main(String[] args) {
int[] arr = {2, 5, 7, 3, 1, 12, -12};
//轮数
for (int i = 1; i < arr.length ; i++) {
//从i+1开始
for (int i1 = i; i1 < arr.length; i1++) {
if (arr[i - 1] > arr[i1]) {
int temp = 0;
temp = arr[i - 1];
arr[i-1] = arr[i1];
arr[i1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
3,二分法查找
二分法查找:要求此数组必须是有序的
需求:运用二分法查找元素; int[] arr3 = new int[]{-99, -54, -2, 0, 2, 33, 43, 256, 999}
public class L3{
public static void main(String[] args) {
//二分法查找:要求此数组必须是有序的。
int[] arr3 = new int[]{-99, -54, -2, 0, 2, 33, 43, 256, 999};
boolean isFlag = true;
int number = 43;//查找的元素
int head = 0;//首索引位置:0
int end = arr3.length - 1;//尾索引位置:8
while (head <= end) {//0<=8 第二次循环5<=8
int middle = (head + end) / 2;//4 //6~7
if (arr3[middle] == number) {//2==43---->False //6==43--->True
System.out.println("找到指定的元素,索引为:" + middle);
isFlag = false;
break;
} else if (arr3[middle] > number) {//4>43---False
end = middle - 1;
} else {//arr3[middle] < number 4<43
head = middle + 1;//5
}
}
if (isFlag) {
System.out.println("未找打指定的元素");
}
}
}