【Java SE】实现冒泡排序和数组逆序
🐳冒泡排序:
给定一个数组, 让数组升序 (降序) 排序.
算法思路: 假设排升序: 1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾 2. 依次从上上述过程,直到数组中所有的元素都排列好
动图如下:
代码实现:
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; bubbleSort(arr); System.out.println(Arrays.toString(arr)); } public static void bubbleSort(int[]arr){ boolean flag=false; //比较的轮数 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; flag=true; } } if(flag==false){ break; } } } }
如果进一步优化便是当有序的时候直接跳出循环
关键在于如何理解冒泡排序,特别是每轮比较的次数是算法的关键。
🐳Java内置数组排序算法:
由于冒泡排序性能较低. Java 中内置了更高效的排序算法
Arrays.sort(arr);
记得加该工具的包名。
代码实现:
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } }
🐳数组逆序:
给定一个数组, 将里面的元素逆序排列
算法思路:
设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素。 然后让前一个下标自增, 后一个下标自减, 循环继续即可。
代码实现:
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; System.out.println("逆序前:"); System.out.println(Arrays.toString(arr)); reverse(arr); System.out.println("逆序后:"); System.out.println(Arrays.toString(arr)); } public static void reverse(int[]arr){ int left=0;//最左边下标(左指针) int right= arr.length-1;//最右边下标(右指针) //开始交换 while(left<right){//满足左指针在右指针的左侧参与循环 int temp=arr[left]; arr[left]=arr[right]; arr[right]=temp; right--; left++; } } }