当前位置:   article > 正文

冒泡排序(java)——3种方法_java冒泡排序最简单写法

java冒泡排序最简单写法

这里的冒泡是按照从小到大的顺序来的

思想:将相邻的元素两两比较, 当一个元素大于右侧相邻的元素时,交换他们的位置;当一个元素小于右侧相邻的元素时,不做任何改变。

一、第一种方法

  1. public static void main(String[] args) {
  2. int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
  3. sort(array);
  4. System.out.println(Arrays.toString(array));
  5. }
  6. private static void sort(int[] arr) {
  7. for (int i = 0; i < arr.length - 1; ++i) {
  8. for (int j = 0; j < arr.length - i - 1; ++j) {
  9. if (arr[j] > arr[j + 1]) {
  10. exchange(arr, j, j + 1);
  11. }
  12. }
  13. }
  14. }
  15. private static void exchange(int[] nums, int i ,int j) {
  16. int temp = nums[i];
  17. nums[i] = nums[j];
  18. nums[j] = temp;
  19. }

二、第二种方法

  1. /**
  2. * 冒泡排序的第二种写法
  3. * 在这种情况下,用一个标记来判断当前数列是否已经有序,若有序,则接下来的排序不必执行,因为已经排好序了
  4. */
  5. public class BubbleSort02 {
  6. public static void main(String[] args) {
  7. int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
  8. sort(array);
  9. System.out.println(Arrays.toString(array));
  10. }
  11. private static void sort(int[] arr) {
  12. //有序标记
  13. boolean isSwapped = true;
  14. for (int i = 0; i < arr.length - 1; ++i) {
  15. if (!isSwapped) return;
  16. isSwapped = false;
  17. for (int j = 0; j < arr.length - i - 1; ++j) {
  18. if (arr[j] > arr[j + 1]) {
  19. isSwapped = true;
  20. exchange(arr, j, j + 1);
  21. }
  22. }
  23. }
  24. }
  25. /**
  26. * 数组中元素的交换
  27. */
  28. private static void exchange(int[] nums, int i ,int j) {
  29. int temp = nums[i];
  30. nums[i] = nums[j];
  31. nums[j] = temp;
  32. }
  33. }

三、第三种方法

 

  1. /**
  2. * 冒泡排序的第三种写法
  3. * 1、记录最后一次元素交换的位置
  4. * 2、有序区的界定(无序数列的边界)
  5. */
  6. public class BubbleSort05 {
  7. public static void main(String[] args) {
  8. int[] arr = new int[]{5, 8, 6, 3, 9, 2, 1, 7};
  9. sort(arr);
  10. System.out.println(Arrays.toString(arr));
  11. }
  12. private static void sort(int[] arr) {
  13. boolean isSwapped = true;
  14. //最后一次元素交换的位置
  15. int lastSwappedIndex = 0;
  16. //无序数列的边界,每次比较只需要比较到这里为止
  17. int disorderBorder = arr.length - 1;
  18. for (int i = 0; i < arr.length - 1; i++) {
  19. if (!isSwapped) return;
  20. isSwapped = false;
  21. for (int j = 0; j < disorderBorder; j++) {
  22. if (arr[j] > arr[j + 1]) {
  23. isSwapped = true;
  24. exchange(arr, j, j + 1);
  25. lastSwappedIndex = j;
  26. }
  27. }
  28. disorderBorder = lastSwappedIndex;
  29. }
  30. }
  31. private static void exchange(int[] nums, int i, int j) {
  32. int temp = nums[i];
  33. nums[i] = nums[j];
  34. nums[j] = temp;
  35. }
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/505148
推荐阅读
相关标签
  

闽ICP备14008679号