java数组-顺序插入数据及二分法查找数据

顺序加入数组,是我自己想出来的。

而二分法这么简单的算法,我自己没有实践出来,还是看了一下书上代码之后,凭记忆写出来的。

可能有稍许不同,但不影响结果。

加油呀。要

class HighArray
  {
      private long[] a;
      private int nElems;

      public HighArray(int max)
      {
          a = new long[max];
          nElems = 0;
      }
      public int size()
      {
          return nElems;
      }
      public int find(long searchKey)
      {
          int lowerBound = 0;
          int upperBound = nElems - 1;
          int curIn;

          while(true)
          {
              curIn = (lowerBound + upperBound) / 2;
              if(a[curIn] == searchKey){
                  return curIn;
              }
              else if(lowerBound > upperBound){
                  return nElems;
              }
              else{
                  if(a[curIn] < searchKey)
                      lowerBound = curIn + 1;
                  else
                      upperBound = curIn -1;
              }

          }

      }
      public void insert(long value)
      {
          int j;
          int i;
          long temp;
          a[nElems] = value;
          nElems++;
          for(j = 0; j < nElems; j++){
              for(i = j; i < nElems; i++){
                  if (a[j] > a[i]){
                      temp = a[i];
                      a[i] = a[j];
                      a[j] = temp;
                  }
              }
            }

          System.out.print("Insert  value: " + value);
          System.out.println("");
      }
      public boolean delete(long value)
      {
          int j;
          for(j = 0; j < nElems; j++)
              if(value == a[j])
                  break;
          if(j == nElems){
              System.out.println("Can't delete value: " + value);
              return false;
          }
          else
          {
              for(int k = j; k < nElems; k++)
                  a[k] = a[k + 1];
              nElems--;
              System.out.println("Delete value: " + value);
              return true;
          }
      }
      public void display()
      {
          for(int j = 0; j < nElems; j++)
              System.out.print(a[j] + " ");
          System.out.println(" ");
      }
  }

public class HighArrayApp {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int maxSize = 100;
        int searchKey;
        HighArray arr;
        arr = new HighArray(maxSize);

        arr.insert(345);
        arr.insert(24);
        arr.insert(4);
        arr.insert(213);
        arr.insert(987);
        arr.insert(43);
        arr.insert(435);
        arr.insert(17);
        arr.insert(323);
        arr.insert(98);

        arr.display();
        System.out.println("Array size is : " + arr.size());
        searchKey = 35;
        if(arr.find(searchKey) != arr.size())
            System.out.println("Found searchKey : " + searchKey);
        else
            System.out.println("Can't find searchKey : " + searchKey);
        searchKey = 323;
        if(arr.find(searchKey) != arr.size())
            System.out.println("Found searchKey : " + searchKey);
        else
            System.out.println("Can't find searchKey : " + searchKey);  

        arr.delete(00);
        arr.delete(55);
        arr.delete(99);

        arr.display();

        arr.insert(62);
        arr.insert(34);

        arr.display();

    }

}

时间: 2024-09-02 15:09:51

java数组-顺序插入数据及二分法查找数据的相关文章

Java实现二分法查找算法

[ 什么是二分查找 ] 二分查找又称为折半查找,该算法的思想是将数列按序排列,采用跳跃式方法进行查找,即先以有序数列的中点位置为比较对象, 如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分.以此类推不断缩小搜索范围. [ 二分查找的条件 ] 二分查找的先决条件是查找的数列必须是有序的. [ 二分查找的优缺点 ] 优点:比较次数少,查找速度快,平均性能好: 缺点:要求待查数列为有序,且插入删除困难: 适用场景:不经常变动而查找频繁的有序列表. [ 算法步骤描述 ] ① 首

php二分法查找数组是否包含某一元素

 二分法查找数组是否包含某一元素,兼容正反序,代码实现:  代码如下: <?php $searchValue = (int)$_GET['key']; function search(array $array, $value) { $max = count($array)-1; $min = 0; $isAscSort = $array[$min] < $array[$max]; while (TRUE) { $sum = $min+$max; $midKey = (int)($sum%2 =

解析php二分法查找数组是否包含某一元素_php技巧

二分法查找数组是否包含某一元素,兼容正反序,代码实现: 复制代码 代码如下: <?php  $searchValue = (int)$_GET['key'];  function search(array $array, $value) {     $max = count($array)-1;     $min = 0;     $isAscSort = $array[$min] < $array[$max];      while (TRUE) {         $sum = $min+

插入数据-利用二分法插入一个数据,数据总是无法达到有序的效果

问题描述 利用二分法插入一个数据,数据总是无法达到有序的效果 主要问题出现在insertElement()方法,其中记录插入数据的midPos始终有问题.始终是会移动有问题.请帮忙看一下. /** * Description: * <br>本程序主要实现一个包含有序数组类. * <br>主要目的:将数组封装起来,然后,外界只能利用提供出去的接口方法,访问数组. * <br>Program Name:OrderArray * <br>Date:2015-09-

JavaScript使用二分查找算法在数组中查找数据的方法_javascript技巧

本文实例讲述了JavaScript使用二分查找算法在数组中查找数据的方法.分享给大家供大家参考.具体分析如下: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一

对象-java JDBC 批量插入的时候报数组下标越界,求大神

问题描述 java JDBC 批量插入的时候报数组下标越界,求大神 代码:private static Boolean Function_User(Map resultMap String sqlString tableType) { // TODO Auto-generated method stub Connection conn=null; PreparedStatement insert_st=null; int count = 0; final int batchSize = 500;

编码-java向mySql插入数据乱码

问题描述 java向mySql插入数据乱码 为什么我执行以下命令行后暂时成功改成了utf8,但是退出mysql后重新进入又变成gbk编码了呢 mysql> SET character_set_client = utf8; mysql> SET character_set_results = utf8; mysql> SET character_set_connection = utf8; 解决方案 你要在my.ini需要修改两处 default-character-set=utf8 ch

java数组为什么不可以打乱顺序

问题描述 java数组为什么不可以打乱顺序 public class Arrays { public static void main(String[] args) { // TODO Auto-generated method stub int arrays[][] = { {3,4,6,8,6,8}, {5,3,4,9,9,4}, }; for (int i = 0; i< arrays.length;i++){ for (int j =0; j<arrays[i].length; j++

JAVA随机打乱数组顺序的方法_java

本文实例讲述了JAVA随机打乱数组顺序的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import java.util.Random;        public class RandomSort {        private Random random = new Random();        //数组大小        private static final int SIZE = 10;        //要重排序的数组        private int