数组学习(二)

1. 数组的查找

    1)线性查找法:将要查找的关键字Key与数组中的元素逐个进行比较。这个过程持续到在列表中找到与关键字匹配的元素,或者查完列表也没有找到关键字为止。如果匹配成功,线性查找法返回与关键字匹配的元素的下标。如果未匹配,则返回-1。

     public class LinearSearch{

             public static int linearSearch(lin [ ] list, int key){

                    for(int i = 0;i < list.length; i++){

                        if(key = list[ i ])

                          return i;

              }

                return -1;

        }

    }    

注:数组中的元素可以任意排序

    2) 二分查找法:首先将关键字与数组的中间元素进行对比:

         如果关键字小于中间元素,只需要在数组的前一般元素中继续查找关键字。

         如果关键字和中间元素相等,则匹配成功,查找结束。

        如果关键字大于中间元素,只需要在数组的后一般元素中继续查找关键字。

       public static int binarySearch(int[ ] list, int key){

               int low = 0;

               int high = list.length - 1;

               while(high > low){

                    if(key < list[ mid ])

                        high = mid - 1;

                   else if(key > list[ mid ])

                       low = mid + 1;

                   else

                       return mid;

      }

            return -1;

     }

2. 数组的排序

    选择排序:先找到数列中最小的数,然后将它放在数列的最前面,接下来,在剩下的数中找到最小数,将它放到第一个数的后面,以此类推。

    public class SelectionSort {
         public static void selectionSort(double[  ] list){
               for(int i = 0;i < list.length;i++){
                   double currentMin = list[i];
                   int currentMinIndex = i;
  
               for(int j = i + 1;j < list.length;j++){
                   if(currentMin > list[j]){
                       currentMin = list[j];
                       currentMinIndex = j;
            }
       }
                 if(currentMinIndex != i){
                     list[currentMinIndex] = list[i];
                     list[i] = currentMin;
                } 
             }
         }
      }

    插入排序:在已排好序的字数列中反复插入一个新元素对数列值进行排序的,直到整个数列全部排好序

     public class InsertionSort {
            public static void insertionSort(double[  ] list){
                   for(int i = 1;i < list.length;i++){
                        double currentElement = list[i];
                        int k;
                        for(k = i - 1;k > 0 && list[k] > currentElement;k--){
                              list[k + 1] = list[k];
                        }
                       list[k + 1] = currentElement;
                }
            }
       }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值