简单的基础排序算法

冒泡排序
        Game Time!
            排排站,吃果果~立正,
            稍息,从矮到高排队啦~
            
        如何实现数字升序排序?
            16 25 9 90 23
            每次比较相邻两数
            小的交换到前面
            每轮结束后最大的数交换到最后
            
            第一轮:比较了4次
            第二轮: 比较了3次
            第三轮:比较了2次
            第四轮: 比较了1次
        用双重循环实现冒泡排序
            用双重循环将5个数字升序排序
                5个数字升序排序数字如何存放
                    数组,数组.length = 5
                控制比较多少轮
                    外层循环,循环变量i i<4 length-1
                控制每轮比较多少次
                    内层循环,循环变量j (j = 4-i)
                交换数据
            
    总结
        冒泡排序实现原理
            每次比较相邻两数
            小的交换到前面
            每轮结束后最大的数交换到最后
            
            
            
    冒泡排序的实现
        用双重循环将5个数字升序排序
            轮 i            比较次数j = 4-i
            0                4
            1                3
            2                2
            3                1

            i+j = 4

            数字个数        轮 =数组.length-1
            5     --- 4  
            6     --- 5
            7     --- 6 
            /*冒泡排序数字(升序排列)*/
                int[] nums = {16,25,9,90,23,100,17};
                System.out.println("*********冒泡排序前************");
                for(int num : nums){
                    System.out.println(num);
                }
                
                //冒泡排序(升序)
                for(int i=0;i<nums.length-1;i++){  //轮
                    for(int j=0;j<nums.length-1-i;j++){  //每一轮比较几次
                        //按照规律比较并交换数字,前面数字比后面数字大,就交换
                        if(nums[j]>nums[j+1]){
                            int temp = nums[j];
                            nums[j] = nums[j+1];
                            nums[j+1] = temp;
                        }
                        
                    }
                    System.out.println("*********冒泡排序后************");
                    for(int num : nums){
                        System.out.println(num);
                    }
                    
            /*冒泡排序5名学员成绩(按降序排列)*/
                Scanner input = new Scanner(System.in);
                System.out.println("请输入5名同学的成绩:");
                int[] scores = new int[5];
                for(int i= 0;i<scores.length;i++){
                    System.out.println("请输入第"+(i+1)+"名同学的成绩:");
                    scores[i] = input.nextInt();
                }
                System.out.println("*********冒泡排序前************");
                for(int num : scores){
                    System.out.println(num);
                }
                
                //冒泡排序(降序)
                for(int i=0;i<scores.length-1;i++){  //轮
                    for(int j=0;j<scores.length-1-i;j++){  //每一轮比较几次
                        //按照规律比较并交换数字,前面数字比后面数字小,就交换
                        if(scores[j]<scores[j+1]){
                            int temp = scores[j];
                            scores[j] = scores[j+1];
                            scores[j+1] = temp;
                        }
                        
                    }
                }
                
                System.out.println("*********冒泡排序后************");
                for(int num : scores){
                    System.out.println(num);
                }
    
    总结
        冒泡排序速记口诀(升序)
            n个数字来排队
            两两相比小靠前
            外层循环n-1
            内层循环 n-1-i
        冒泡排序,n个数字共比较几次
        数字个数      比较次数
        n        (n-1)+(n-2)+.....+2+1 = ?  n(n-1)/2
        
        
        
        
        
        
选择排序
    定义数组
    循环比较
        下标为i的元素依次和之后的所有元素比较,找到本轮最小 (大)的元素
    交换元素
        将最小元素与下标为i的元素交换
        比冒泡排序交换次数少,但比较次数不变
        
            int] arr =(4,7,3,9,1};、
            int min = -1;//最小值下标
            //外层:比较几轮
            for(int i = ;i<arr.length-1;i++){
                min = i; //每轮min初始值
                //内层:当前元素和后面的元素比较,记录最新的最小元素下标
                for(int j=i+l; j<arr.length;j++){
                    if(arr[min]>arr[j]){
                        min = j;
                        }
                    }
                    //如果min值发生变化,说明发现了更小的值,则将当前值和更小的值交换,保证小值放在数组前面
                    if(min!=i){
                        int temp = arr[min];
                        arr[min]=arr[il;
                        arr[i] = temp;
                    }
                }
                //输出排序后的数组
                for(int num:arr){
                    System,out.println(num+"\t");
                }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值