春風博客

          春天里,百花香...

          導航

          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          整形數組實用類,用于求兩數組的并交差集

          package com.sitinspring;

          /**
           * 整形數組實用類,能求兩數組的并交差集,不借助于集合類
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-6-24-下午10:13:33
           
          */

          public final class IntegerArrayUtil{
              
          // 私有構造函數,防止創建IntegerArrayUtil的實例
              private IntegerArrayUtil(){
                  
              }

              
              
          /**
               * 取得兩數組并集
               * 
          @param arr1
               * 
          @param arr2
               * 
          @return
               
          */

              
          public static int[] union(int[] arr1,int[] arr2){
                  DynamicArray dynamicArray
          =new DynamicArray();
                  
                  
          for(int temp:arr1){
                      dynamicArray.add(temp);
                  }

                  
                  
          for(int temp:arr2){
                      
          if(!exist(temp,arr1)){
                          dynamicArray.add(temp);
                      }

                  }

                  
                  
          return dynamicArray.getArr();
              }

              
              
          /**
               * 取得兩數組交集
               * 
          @param arr1
               * 
          @param arr2
               * 
          @return
               
          */

              
          public static int[] intersact(int[] arr1,int[] arr2){
                  DynamicArray dynamicArray
          =new DynamicArray();
                  
                  
          for(int temp:arr1){
                      
          if(exist(temp,arr2)){
                          dynamicArray.add(temp);
                      }

                  }

                  
                  
          return dynamicArray.getArr();
              }

              
              
          /**
               * 取得兩數組差集
               * 
          @param arr1
               * 
          @param arr2
               * 
          @return
               
          */

              
          public static int[] minus(int[] arr1,int[] arr2){
                  DynamicArray dynamicArray
          =new DynamicArray();
                  
                  
          for(int temp:arr1){
                      
          if(!exist(temp,arr2)){
                          dynamicArray.add(temp);
                      }

                  }

                  
                  
          return dynamicArray.getArr();
              }

              
              
          /**
               * 判斷number在數組arr中是否存在
               * 
          @param number
               * 
          @param arr
               * 
          @return
               
          */

              
          private static boolean exist(int number,int[] arr){
                  
          for(int temp:arr){
                      
          if(number==temp){
                          
          return true;
                      }

                  }

                  
                  
          return false;
              }

              
              
          /**
               * 顯示數組元素
               * 
          @param arr
               
          */

              
          private static void display(int[] arr){
                  
          for(int temp:arr){
                      System.out.print(temp
          +",");
                  }

                  
                  System.out.println();
              }

              
              
          public static void main(String[] args){
                  
          int[] arr1={1,2,3,4,5,0,-1,-2,-3,-4,-5,};
                  
          int[] arr2={6,2,7,4,8,0,-1,-2,};

                  System.out.print(
          "數組arr1為");
                  display(arr1);
                  System.out.print(
          "數組arr2為");
                  display(arr2);
                  System.out.print(
          "arr1和arr2的并集為");
                  display(IntegerArrayUtil.union(arr1, arr2));
                  System.out.print(
          "arr1和arr2的交集為");
                  display(IntegerArrayUtil.intersact(arr1, arr2));
                  System.out.print(
          "arr1和arr2的差集為");
                  display(IntegerArrayUtil.minus(arr1, arr2));
              }

          }

          輸出:
          數組arr1為1,2,3,4,5,0,-1,-2,-3,-4,-5,
          數組arr2為6,
          2,7,4,8,0,-1,-2,
          arr1和arr2的并集為1,
          2,3,4,5,0,-1,-2,-3,-4,-5,6,7,8,
          arr1和arr2的交集為2,
          4,0,-1,-2,
          arr1和arr2的差集為1,
          3,5,-3,-4,-5,

          動態數組類:
          package com.sitinspring;

          /**
           * 動態數組類,以數組為數據容器實現動態數組的功能
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-6-23-下午10:08:09
           
          */

          public class DynamicArray {
              
          /** *//**
               * 用于存儲數據的數組
               
          */

              
          private int[] arr;

              
          /** *//**
               * 初始化大小
               
          */

              
          private static final int initSize = 10;

              
          /** *//**
               * 當前元素個數
               
          */

              
          private int currItemsCount = 0;

              
          /** *//**
               * 構造函數一,固定大小
               
          */

              
          public DynamicArray() {
                  arr 
          = new int[initSize];
              }

              
              
          /** *//**
               * 構造函數二,指定大小
               
          */

              
          public DynamicArray(int len) {
                  arr 
          = new int[len];
              }


              
          /** *//**
               * 取得位置在i的元素
               
          */

              
          public int get(int i) {
                  
          if (i < currItemsCount) {
                      
          return arr[i];
                  }


                  
          return -999;
              }


              
          /** *//**
               * 取得數組中已有元素的個數
               * 
          @return
               
          */

              
          public int size() {
                  
          return currItemsCount;
              }


              
          /** *//**
               * 添加一個元素到數組
               * 
          @param number
               
          */

              
          public void add(int number) {
                  
          if (currItemsCount >= arr.length) {
                      
          int[] arrNew = new int[arr.length * 2];
                      
          for (int i = 0; i < arr.length; i++{
                          arrNew[i] 
          = arr[i];
                      }


                      arr 
          = arrNew;
                  }


                  arr[currItemsCount] 
          = number;
                  currItemsCount
          ++;
              }


              
          /** *//**
               * 刪除位置在i的元素
               * 
          @param removeIndex
               
          */

              
          public void remove(int removeIndex) {
                  
          if (removeIndex < arr.length) {
                      
          if (removeIndex > currItemsCount) {
                          
          int[] arrNew = new int[arr.length - 1];
                          
          for (int j = 0; j < arrNew.length; j++{
                              arrNew[j] 
          = arr[j];
                          }


                          arr 
          = arrNew;
                      }
           else {
                          
          int[] arrNew = new int[arr.length - 1];
                          
          for (int j = 0; j < removeIndex; j++{
                              arrNew[j] 
          = arr[j];
                          }


                          
          for (int j = removeIndex + 1; j < arr.length; j++{
                              arrNew[j 
          - 1= arr[j];
                          }

                          currItemsCount
          --;
                          arr 
          = arrNew;
                      }

                  }

              }


              
          /** *//**
               * 取得添值部分的數組
               * 
          @return
               
          */

              
          public int[] getArr() {
                  
          int[] arrNew = new int[currItemsCount];

                  
          for (int i = 0; i < arrNew.length; i++{
                      arrNew[i] 
          = arr[i];
                  }


                  
          return arrNew;
              }

              
              
          /** *//**
               * 取得已排序的數組
               * 
          @return
               
          */

              
          public int[] getSortedArr(){
                  
          int[] arrSorted = getArr();
                  insertSort(arrSorted);
                  
          return arrSorted;
              }


              
          /** *//**
               * 進行插入排序
               * 
          @param arr
               
          */

              
          private static void insertSort(int[] arr) {
                  
          int i, temp;
                  
          // 插入位置
                  int insertPos;
                  
          for (i = 1; i < arr.length; i++{
                      
          // 當前需要進入已排序隊列的項
                      temp = arr[i];
                      insertPos 
          = i;

                      
          // 向右移動
                      while (0 < insertPos && arr[insertPos - 1>= temp) {
                          arr[insertPos] 
          = arr[insertPos - 1];
                          
          --insertPos;
                      }


                      
          // 當前項該處于的位置
                      arr[insertPos] = temp;
                  }

              }


              
          /** *//**
               * 顯示添值部分的數組
               *
               
          */

              
          public void display() {
                  System.out.print(
          "現有元素有:");
                  
          for (int i = 0; i < currItemsCount; i++{
                      System.out.print(arr[i] 
          + ",");
                  }

                  System.out.print(
          "\n");
              }


              
          /** *//**
               * 顯示數組的所有子元素,包括添值和未添值部分
               *
               
          */

              
          public void displayAll() {
                  System.out.print(
          "所有元素有:");
                  
          for (int i = 0; i < arr.length; i++{
                      System.out.print(arr[i] 
          + ",");
                  }

                  System.out.print(
          "\n");
              }


              
          /** *//**
               * 程序入口
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  DynamicArray dArray 
          = new DynamicArray(12);

                  dArray.add(
          1);
                  dArray.add(
          2);
                  dArray.add(
          3);
                  dArray.add(
          4);
                  dArray.add(
          5);
                  dArray.display();
                  dArray.displayAll();

                  dArray.add(
          6);
                  dArray.add(
          7);
                  dArray.add(
          8);
                  dArray.add(
          9);
                  dArray.add(
          10);
                  dArray.display();
                  dArray.displayAll();

                  dArray.add(
          11);
                  dArray.add(
          12);
                  dArray.add(
          13);
                  dArray.add(
          14);
                  dArray.add(
          15);
                  dArray.display();
                  dArray.displayAll();

                  dArray.remove(
          3);
                  dArray.display();
                  dArray.displayAll();

                  dArray.remove(
          0);
                  dArray.display();
                  dArray.displayAll();

                  dArray.remove(
          10);
                  dArray.display();
                  dArray.displayAll();

                  dArray.add(
          2);        
                  dArray.add(
          3);
                  dArray.add(
          4);
                  dArray.add(
          3);
                  dArray.add(
          4);
                  
                  dArray.display();
                  System.out.print(
          "已排序數組元素為:");
                  
          int[] arr = dArray.getSortedArr();
                  
          for (int i = 0; i < arr.length; i++{
                      System.out.print(arr[i] 
          + ",");
                  }

                  System.out.print(
          "\n");
              }

          }

          posted on 2008-06-24 22:51 sitinspring 閱讀(1210) 評論(0)  編輯  收藏 所屬分類: Java基礎算法數據結構

          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 江城| 漳平市| 枣庄市| 闸北区| 乐昌市| 开鲁县| 滁州市| 桐庐县| 永平县| 宜昌市| 保德县| 通海县| 五家渠市| 固始县| 吉木萨尔县| 安仁县| 福贡县| 遵义县| 沅陵县| 秭归县| 壶关县| 兴海县| 南溪县| 大余县| 津南区| 岑巩县| 普兰店市| 池州市| 灵台县| 精河县| 武陟县| 盐城市| 宝鸡市| 乌审旗| 淮南市| 巴中市| 弥渡县| 哈密市| 镶黄旗| 满城县| 务川|