Java常用排序算法冒泡排序与选择排序总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuanguofeng/article/details/72904560

概述

排序算法有好多种,也在特殊的场景中,我们经常需要对我们的数据进行排序,这里对经典的排序做一个记录整理。

一冒泡排序

原理分析

冒泡排序其实就是对一组数以类似冒泡对形式,进行从大到小或者从小到大的排序,那么什么是冒泡呢?

其实也简单,比如有一组数字:3,9,6,2
第一轮比较

以上图只比较了第一轮,会冒出一个较大大,依此类推进行比较。

以此比较两个数字,将较较小的数字一个一个冒上来,将相反的较大的数字往下沉,然后内层循环每一轮比较就会冒出来一个最大数字,这样有2层循环即可,外层循环完后,所有的数字就冒完了。

代码实现(java)


public class MPTest {
      public static void main(String[] args) {
        int [] numbers={3,9,6,2};
        int temp=0;
        for(int i=0;i<numbers.length-1;i++){
            for(int j=0;j<numbers.length-1-i;j++){//内层循环一次冒泡出一个比较小的数上来
                if(numbers[j]>numbers[j+1]){//如果第一个数字比第二个大则交换位置
                    temp=numbers[j];
                    numbers[j]=numbers[j+1];
                    numbers[j+1]=temp;
                    }
            }
        }
        for(int i=0;i<numbers.length;i++){
            System.out.println("第"+i+"个数字是:"+numbers[i]);
        }   
    }

}
输出结果是:
第0个数字是:2
第1个数字是:3
第2个数字是:6
第3个数字是:9

二选择排序

原理分析

选择排序其实其实思路也是比较简单的,也是2层循环。
主要思路是记录一个最小值,然后内层循环如果有比它小的就跟这个最小值交换位置,这样就能确定第一位最小值,然后第二次循环也是如此,以此类推就能按照由小到大排序。

还是对这几个数字进行排序:3 9 6 2

第一次循环:2 9 6 3

第二次循环:2 3 6 9

代码实现(java)


public class XZTest {
    public static void main(String[] args) {
           int[] numbers = {3, 9, 6, 2};
            int temp=0;
            for (int i = 0; i < numbers.length; i++) {
                int min = i;
                for (int j = i + 1; j < numbers.length; j++) {
                    if(numbers[j]< numbers[min]){
                       min=j;
                    }
                }
                if(i!=min){
                    temp=numbers[i];
                    numbers[i]=numbers[min];
                    numbers[min]=temp;
                }
            }
            for(int i=0;i<numbers.length;i++){
                System.out.println("第"+i+"个数字是:"+numbers[i]);
            }   
    }
}
输出结果是一样的:
第0个数字是:2
第1个数字是:3
第2个数字是:6
第3个数字是:9

猜你喜欢

转载自blog.csdn.net/xuanguofeng/article/details/72904560