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