一、选择排序(升序)
原理:选择一个位置(一般拿数组的第一个元素),拿这个位置上的值不断和其他位置的值进行比较。
将最小的元素交换至左侧,每一轮比较的次数,比上一轮少一次
class Demo_Selection_Sort
{
public static void main(String[] args)
{
/*
已知一个无序数组 将数组进行从小到大 升序排序
常见算法1
选择排序
*/
int[] arr = {3,1,4,2,7,5}; //1,2,3,4,5,7
for(int i=0;i<arr.length-1;i++){//外层循环-1 因为循环最后一次 5角标和5角标的值自己比自己 没意义
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//遍历数组
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
二、冒泡排序(升序)
原理:相邻的两个元素之间进行两两比较,大的先出现在右侧
例子:
class Demo_Bubble_Sort
{
public static void main(String[] args)
{
//算法2 冒泡排序 从小到大 升序
int[] arr = {3,4,2,5,1};
for(int i=0;i<arr.length-1;i++){//如果剩下最后一个元素了 还能相邻吗 不能 所以-1
for(int j=0;j<arr.length-i-1;j++){//-i 每一轮比较后 大的值跑到右侧 参与比较的元素 少一个
if(arr[j]>arr[j+1]){ //-1 当j=4 4+1就越界了 所以-1
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//遍历输出
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
三、二分查表法(折半查找)
和顺序查找一样,功能都是根据元素查找角标
根据元素 查找元素在当前数组中第一次出现的位置
找到了 返回对应索引
找不到 返回-1
前提:必须是有序数组
例子:
class Demo_Array_Selection
{
//算法 3 二分查表法 查询指定元素 的索引 有就返回 没有就返回-1
public static void main(String[] args)
{
int[] arr = {10,2,4,7,19,8};
//二分查找法有前提 必须是有序数组
print(arr); //遍历 排序前
sort(arr); //排序
print(arr); //遍历 排序后
//调用二分法 查找10 在数组中第一次出现的位置
int index = findIndex(arr,10);
System.out.println(index);
}
/*
二分查找法 方法抽取
1.方法名 findIndex
2.参数列表 数组 值
3.返回值类型 int 角标
*/
public static int findIndex(int[] arr,int value){
int start = 0;//初始起点
int end = arr.length-1; //初始终点 最大角标
int middle = (start+end)/2; //初始中间点角标
while(arr[middle]!=value){
if(value>arr[middle]){
start = middle + 1;
}else if(value<arr[middle]){
end = middle - 1;
}
if(start>end){
return -1;
}
middle = (start+end)/2;
}
return middle;
}
//遍历数组
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
//冒泡排序
public static void sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}