好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java冒泡排序和选择排序详解

1、冒泡排序

冒泡排序(Bubble Sorting)的基本思想是:通过对待

排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下
来没有进行过交换,就说明序列有序。

图解冒泡排序算法的过程

原始数组:3, 9, -1, 10, 20

第一趟排序

(1) 3, 9, -1, 10, 20 // 如果相邻的元素逆序就交换

(2) 3, -1, 9, 10, 20

(3) 3, -1, 9, 10, 20

(4) 3, -1, 9, 10, 20

第二趟排序

(1) -1, 3, 9, 10, 20 //交换

(2) -1, 3, 9, 10, 20

(3) -1, 3, 9, 10, 20

第三趟排序

(1) -1, 3, 9, 10, 20

(2) -1, 3, 9, 10, 20

第四趟排序

(1) -1, 3, 9, 10, 20

小结冒泡排序规则

(1) 一共进行 数组的大小-1 次 大的循环

(2)每一趟排序的次数在逐渐的减少

(3) 如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。这个就是优化

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import java.util.Arrays;

public class BubbleSort {

     public static void main(String[] args) {

         // TODO Auto-generated method stub

         int arr[]= { 3 , 9 ,- 1 , 10 ,- 2 };

         //第i+1趟排序,将最大的数排在最后

         int temp= 0 ; //临时变量

         for ( int i= 0 ;i<arr.length- 1 ;i++) { //定义第几轮排序

          for ( int j= 0 ;j<arr.length- 1 -i;j++) {

              if (arr[j+ 1 ]<arr[j]) {

               temp=arr[j];

              arr[j]=arr[j+ 1 ];

              arr[j+ 1 ]=temp;

              }

              }

         System.out.println( "输出第" +(i+ 1 )+ "趟排序的结果" );

         System.out.println(Arrays.toString(arr));

         }

     

         }

     }

运行结果:

输出第 1 趟排序的结果
[ 3 , - 1 , 9 , - 2 , 10 ]
输出第 2 趟排序的结果
[ - 1 , 3 , - 2 , 9 , 10 ]
输出第 3 趟排序的结果
[ - 1 , - 2 , 3 , 9 , 10 ]
输出第 4 趟排序的结果
[ - 2 , - 1 , 3 , 9 , 10 ]

2、选择排序法

排序思路:

原始的数组 : 101, 34, 119, 1

第一轮排序 : 1, 34, 119, 101

第二轮排序 : 1, 34, 119, 101

第三轮排序 : 1, 34, 101, 119

说明:

1.选择排序一共有 数组大小 - 1 轮排序

2.每1轮排序,又是一个循环, 循环的规则(代码)

2.1先假定当前这个数是最小数 2.2 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标 2.3 当遍历到数组的最后时,就得到本轮最小数和下标 2.4 交换 [代码中再继续说 ]

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import java.util.Arrays;

public class QuickSort {

     public static void main(String[] args) {

        //int []arr={ 8,3,2,1,7,4,6,5};

        int [] arr={ 101 , 34 , 109 , 1 };

        quicksort(arr);

     }

     public static void quicksort( int []arr){

         for ( int j= 0 ;j<arr.length- 1 ;j++) {

             int minindex=j; //假定当前下标为最小值下标

             int minnumber=arr[j]; //假定当前元素为最小值

             for ( int i = 1 +j; i < arr.length; i++) {

                 if (arr[i] < minnumber) { //若假定最小值并不是最小的

                     minnumber = arr[i]; //重置minnumber

                     minindex = i; //重置minindex

                 }

             }

             //将最小值交换

             arr[minindex] = arr[j];

             arr[j] = minnumber;

             System.out.println( "第" +(j+ 1 )+ "轮" );

             System.out.println(Arrays.toString(arr));

         }

     }

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注的更多内容!

原文链接:https://blog.csdn.net/weixin_55782195/article/details/116059075

查看更多关于java冒泡排序和选择排序详解的详细内容...

  阅读:19次