冒泡排序与选择排序

冒泡排序

冒泡排序原理:比较相邻的元素,较小的放到前面,较大的放到后面

要理解冒泡排序首先要理解两个元素互换

例如

int a = 10;
int b = 20;

如何才能让a = 20;b = 10;如下代码是不能实现的

int a = 10;
int b = 20;
a = b;//首先b = 20;然后把b的值赋值给a,所以a = 20;
b = a;//这是a = 20; 然后把a的值20赋值给b。这个时候b的值也是20

思考:如果家里有两个瓶子,1号瓶子装水,2号瓶子装油,那么如何才能让1号瓶子装油,2号瓶子装水
解答:再找一个3号空瓶子,首先把1号瓶子的水倒入3号瓶子,把2号瓶子的油倒入1号瓶子,最后吧3号瓶子的水倒入2号瓶子;这样是不是就完成了互换了
所以

int a = 10;
int b = 20;
int c;
c = a; 
a = b;
b = c

-冒泡排序的每一次内层循环都会找到最小值

/**
     * 冒泡排序
     * @param args
     * 
     * 6,2,4,1,5,9
     * 第一次排序:
     *  2,4,1,5,6,9 5
     * 1    5
     * 二次
     * 2,1,4,5,6, 9  4
     * 
     * 2    4
     * 三次
     * 1,2,4,5          3
     * 3    3
     * 
     * 4    3
     * 
     * 五次
     * 5    1               
     *   
     * 
     *  第一次排序:结果就是找到最大值
     * 2            第2
     * 3            3
     * ……
     * 5            5
     * 
     * 
     * 
     * 5,4,3,2,1
     * 1    
     * 4,3,2,1,5
     * 
     * 2
     * 3,2,1,4,5
     * 
     * 3
     * 2,1,3,4,5
     * 
     * 4
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [] arr = new int[]{5,4,3,2,1};
        
//      外层循环是排序的次数 (i+1)
        for(int i = 0; i < arr.length - 1; i ++){
            //内层循环,相当于排序一次
//                  j = 0  j =4    j < 5
            for(int j = 0; j < arr.length - 1 - i; j ++){
//              实现的就是相邻元素进行比较,大的放到后面,小的放到前面
                if(arr[j] > arr[j+1]){
//                  交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        
        
        for(int i = 0; i < arr.length; i ++){
            System.out.print(arr[i]+"\t");
        }
    }

选择排序

选择排序的基本思想是将指定的排序位置与其他数组元素分别对比,如果满足条件就交换元素值

image.png

public static void main(String[] args){
        int arr[] = {6,5,4,3,2,1,0};
        /**
         * 第一次拿下标为0的和后面的元素依次进行比较
         * 1,6,5,2,4,9
         * 
         * 继续拿下标为1
         * 1 ,2,6,5
         * 
         * 继续拿下标为2
         * 
         * 继续拿下标为4 =   arr.length -2
         */
        for(int i = 0; i < arr.length - 1; i ++){
            for(int j = i + 1; j < arr.length; j ++){
                if(arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;      
                }
            }
        }
        
        /**
         * 数组名[下标]
         */
        for(int i=0;i<arr.length; i++){
            System.out.print(arr[i]+"\t");
        }

如果明白了,请赞赏,1分也是爱。
如果还是不理解,看来需要视频讲解以及面对面一对一讲解了(视频+源码 5元)
联系方式QQ:1718202383
可接应届毕业生论文项目
可接外包项目


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容