黑马程序员技术交流社区

标题: 数组操作分享 [打印本页]

作者: 王章亚    时间: 2012-7-3 13:42
标题: 数组操作分享
1.        数组的操作
package ch01;

public class MyArray {

        private static int[] arr;
        private static int elements;// 数组内的有效数据。

        public MyArray() {
                arr = new int[10];
        }

        /**
         * 显示数组中的元素
         *
         */
       public static void displayNum(){
                System.out.print("{");
               for(int i=0;i<elements;i++){
                      System.out.print(arr[i]+" ");
               }
               System.out.println("}");
           }
        /**
         * 增加数据
         *
         * @param avlue插入的值
         */
        public static void insertNum(int value) {

                arr[elements]=value;
                elements++;
        }
        /**
* 有序的插入数据
         * @param value 要插入的数值
         */
    public static void orderInsertNum(int value){
            int i;
            for(i=0;i<elements;i++){
                    if(arr[i]>value)
                            break;
            }
            for(int j=elements;j>i;j--){
                    arr[j]=arr[j-1];
            }
            arr[i]=value;
            elements++;
    }
        /**
         * 删除数组里面的元素
         *
         * @param index  需要删除的数据的下标
         */
        public static void deleteNum(int index) {
                for(int i=index;i<elements;i++){
                        arr[i]=arr[i+1];
                        elements--;
                }

        }

        /**
         * 修改数组中的元素
         *
         *@param index 需要更新的数值的下标
         *@param newValue  要更新的新数值。
         */
        public static void updateNum(int index, int newValue) {

                arr[index]=newValue;
          }
        /**
         * 查找数组中的值
         * @param value 需要查找的数值
         */
    public static int searchNum(int value){
            int i;
                for( i=0;i<elements;i++){
                        if(arr[i]==value){
                                break;
                        }
                }
                return i;
          }
    /**
     * 二分法查找数组中的元素
     * @param value 要查找的数值
     */
    public static int searchNumOfHalf(int value){
           
            int left=0;
            int right=elements;
            int mid=(left+right)/2;
            while(arr[mid]!=value){
                    if(arr[mid]>value){
                            right=mid-1;
                    }
                    else{
                            left=mid+1;
                    }
                    mid=(left+right)/2;
            }
            return mid ;
    }
}
2.        简单排序
(1.)冒泡排序
/**
         * 实现数值冒泡排序
         * @param num 要排序的数组
         */
        public static void maoPaoPaiXu(int[] num){
               
                for(int i=0;i<num.length-1;i++){
                        for(int j=0;j<num.length-1;j++){
                                if(num[j]>num[j+1]){
                                        int temp=num[j];
                                        num[j]=num[j+1];
                                        num[j+1]=temp;
                                }
                        }
                }
                for(int i=0;i<num.length;i++){
                        System.out.print(num[i]+" ");
                }
        }
这样可以实现排序但是存在着缺点,效率会低,因为每次都需要执行num.lenthg-1次比较。应该用下面的代码

        /**
         * 实现数值冒泡排序
         * @param num 要排序的数组
         */
        public static void maoPaoPaiXu(int[] num){
               
                for(int i=0;i<num.length-1;i++){
                        for(int j=0;j<num.length-i-1;j++){ //这样就会减少判断的次数
                                if(num[j]>num[j+1]){
                                        int temp=num[j];
                                        num[j]=num[j+1];
                                        num[j+1]=temp;
                                }
                        }
                }
                for(int i=0;i<num.length;i++){
                        System.out.print(num[i]+" ");
                }
        }
(2)选择排序
/**
         * 选择排序
         * @param num 需要排序的数组
         */
        public static void selectionSort(int[]num){
               
                int k=0;//总是指向最小值  j 不停的在移动 i 排完序的位置
                for(int i=0;i<num.length-1;i++){
                        k=i;
                        for(int j=i;j<num.length;j++){
                                if(num[j]<num[k]){
                                        k=j;
                                }
                        }
                        int temp=num[i];
                        num[i]=num[k];
                        num[k]=temp;
                }
                for(int i=0;i<num.length;i++){
                        System.out.print(num[i]+" ");
                }
        }





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