黑马程序员-Java基础知识2.(笔记部分总结-方法,排序和查询)

来源:互联网 发布:ubuntu 16.04 ide 编辑:程序博客网 时间:2024/06/05 15:00
1.方法三要素

方法:method(函数function = 功能) y=f(x)

1)方法的主要三要素:方法名、参数列表、返回值。

2)什么是方法:一个算法逻辑功能的封装,是一般完成一个业务功能,如:登录系统,创建联系人,简单说:方法是动作,是动词。

3)方法名:一般按照方法实现的功能定名,一般使用动词定义,一般使用小写字母开头,第二个单词开始,单词首字母大写。如:createContact() 。

4)参数列表:是方法的前提条件,是方法执行依据,是数据。如:

    login(String id, String pwd) ,参数的传递看定义的类型及顺序,不看参数名。

5)方法返回值:功能执行的结果,方法必须定义返回值,并且方法中必须使用return语句返回数据;如果无返回值则定义为void,此时return语句可写可不写;返回结果只能有一个,若返回多个结果,要用数组返回(返回多个值)。

     注意事项:递归调用:方法中调用了方法本身,用递归解决问题比较简练,只需考虑一层逻辑即可!但是需要有经验。一定要有结束条件

2.插入排序
将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素循环第1条规则,找出最小元素,放于第1个位置经过n-1轮比较完成排序。

                                                     

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

                             int k = arr[i];// 取出待插入元素

                                           int j;// 找到插入位置

                              for (j = i - 1; j >= 0&& k < arr[j]; j--) {

                                     arr[j+ 1] = arr[j];// 移动元素

                }     

                            arr[j + 1] = k;// 插入元素

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

                 }

3.冒泡排序

 比较相邻的元素,将小的放到前面。

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

                          boolean isSwap = false;

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

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

                                  intt = arr[j];

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

                                arr[j+ 1] = t;

                              isSwap= true;

               }

          }

          if (!isSwap){   break;   }

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

      }

4.冒泡排序:轻气泡上浮的方式

冒泡排序法可以使用大气泡沉底的方式,也可以使用轻气泡上浮的方式实现。如下为使用轻气泡上浮的方式实现冒泡排序算法。

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

          boolean isSwap = false;

        for (int j = arr.length - 1; j > i;j--) {

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

                   intt = arr[j];

                arr[j] = arr[j - 1];

                arr[j - 1] = t;

                sSwap = true;

            }

        }

        if (!isSwap){   break;  }

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

      }

5.

二分法查找

      intlow= 0;            inthigh= arr.length - 1;         intmid = -1;

      while(low<= high) {

          mid = (low + high) / 2;

          if (arr[mid] < value){    low = mid + 1;              }

          else if (arr[mid] >value){   high = mid - 1;   }

        else{   break;}

   }

   if (low <= high) {         System.out.println("可以找到:index = " + mid + "。");

   } else {   System.out.println("无法找到!");         }

二分法思想是取中,比较 :

1)求有序序列arr的中间位置mid。        2)k为要查找的数字。

若arr[mid] == k,查找成功;

若arr[mid] > k,在前半段中继续进行二分查找;

若arr[mid] < k,则在后半段中继续进行二分查找。

假如有一组数为3、12、24、36、55、68、75、88要查给定的值k=24。可设三个变量low、mid、high分别指向数据的上界,中间和下界,mid=(low+high)/2.

1)开始令low=0(指向3),high=7(指向88),则mid=3(指向36)。因为k<mid,故应在前半段中查找。

2)令新的high=mid-1=2(指向24),而low=0(指向3)不变,则新的mid=1(指向12)。此时k>mid,故确定应在后半段中查找。

3)令新的low=mid+1=2(指向24),而high=2(指向24)不变,则新的mid=2,此时k=arr[mid],查找成功。

如果要查找的数不是数列中的数,例如k=25,当第四次判断时,k>mid[2],在后边半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出现low>high的情况,表示查找不成功。

0 0
原创粉丝点击