黑马程序员技术交流社区

标题: 来黑马接触的第一个算法.冒泡排序 [打印本页]

作者: 零落心    时间: 2019-3-8 13:33
标题: 来黑马接触的第一个算法.冒泡排序
本帖最后由 零落心 于 2019-3-8 13:35 编辑

法一直是计算机科学领域最重要的基石之一,正如我的就业指导老师汪新刚老师所言,如果把编程比作武功的话,那么算法就好比内功,只懂得招式,没有功力的提升,那么是永远不可能成为高手的,而功力的提升,则需要由量变引起质变的过程,冰冻三尺非一日之寒.
当做到陈君哥留下的第五天作业题时,我也恰逢机缘巧合遇到了这一问题:
定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下:
    请输入第一个整数:10
    请输入第二个整数:30
    请输入第三个整数:20
    从大到小的顺序是: 30 20 10
看似简单的一道排序题,按答案的思路是:
1使用键盘录入分别录入三个整数。
2定义method方法,方法的参数是三个int类型,方法的返回值类型是void
3定义整数变量max用于存储最大值,定义min变量用于存储最小值。
4使用if..else..多分支判断语句计算三个整数中的最大值并赋值给max。
5使用if..else..多分支判断语句计算三个整数中的最小值并赋值给min。
6定义变量mid代表中间数,三个整数的和减去max,再减去min,就是中间数的值。
7 依次打印最大值,中间值和最小值。
8在主方法中调用method方法,传入参数。
求出最大值在求出最小值,再用总和减去两个值算出中间值,但是倘若再输入一个数,那么本题的答案就无法适用了,所以本文重点讲解最初级的算法之一,冒泡排序.
从最简单开始,首先我们创建一个数组,该数组有5位数字
Int[] arr={20,50,10,30,40}
Index索引角标从0开始,让i从0开始,i与i+1比较,如果i>i+1,那么就互换,i不断增加,直到i<arr.length-1 ,一趟下来,可以让数组元素中最大值排在数组的最后面
    if (arrays[0] > arrays[1]) {
            temp = arrays[0];
            arrays[0] = arrays[1];
            arrays[1] = temp;   }
然后开始走循环,如果前一位的数比后一位的数要大,那么就交换,直到将数组的所有元素都比较了一遍!经过一趟比较,我们可以发现,每一轮的比较最大的值就会去数组的末尾!
第二趟排序跟第一趟排序一样,也是用前一位与后一位比较,如果前一位比后一位要大,那就交换。值得注意的是:并不需要与最后一位比较了,因为在第一趟排序完了,最后一位已经是最大的数了。同理,我们第二趟排序完了之后,倒数第二位也是第二大的数了。以此类推,就可以将数组所有的数字按顺序排序了.
首先开始导包,由用户输入长度.
import java.util.Scanner;
public class day05Work05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
//数组长度由用户输入
        System.out.println("请输入您所要的数组长度");
        int num = sc.nextInt();
//赋值给数组长度,新建数组
        int[] arr = new int[num];
//循环录入各个数字
        for (int i = 0; i < num; i++) {
            System.out.println("请输入第"+(i+1)+"个数");
            arr = sc.nextInt();
        }
        array(arr);
    }
        public static void array ( int[] arr){
            int temp= 0;
            for (int k = 0; k < arr.length; k++) {
//前一位与后一位与前一位比较,如果前一位比后一位要大,那么交换
                for (int i = 0; i < arr.length - 1; i++) {
                    if (arr > arr[i + 1]) {
                        temp = arr;
                        arr = arr[i + 1];
                        arr[i + 1] = temp;
                    }
                }
            }
//遍历数组,由小到大输出.
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j] + "\t");
            }
        }
    }
测试代码:
请输入您所要的数组长度
3
请输入第1个数
1
请输入第2个数
2
请输入第3个数
3
1  2        3
验证成功,解题完成,完美谢幕,

20180110174118574735.jpg (261.09 KB, 下载次数: 9)

20180110174118574735.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2