黑马程序员技术交流社区

标题: 数组的排序查找还有一些知识点 总结了下 分享下 [打印本页]

作者: 付鹏    时间: 2012-3-11 21:27
标题: 数组的排序查找还有一些知识点 总结了下 分享下
一些异常的问题
ArrayIndexOutOfBoundsException
下标越界异常
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小则抛出次异常。
如下面的例子
数组int[] arr
当你访问arr[-1]  或者访问  arr[arr.length]或者大于arr.length时一定会抛出该异常,出现下标越界的问题


NullPointerException
空指针异常:当指针没有指向任何指向值为空的情况该指针还在用于操作实体就会抛出该异常,如

int[] arr = {1,23,45}
把arr = null;
System.out.println(arr[1]);此时一定会抛出NullPointerException

获取数组中的最大值和最小值的方法 取最值只适合数值型数组
我就拿最小值举例吧
public static int getMin(int []  arr) {
                int min = arr[0];
                for(int i=1;i<arr.length;i++) {
                        if(min>arr[i]) {
                                min = arr[i];
                        }       
                }
                return min;
        }

        public static void main(String[] args) {
                int[] arr  =  {88,65,48,12,1,0,3};
                int min  =  getMin(arr);
                System.out.println("min="+min );
        }


选择排序

public class dfdfd {
        public static void selectsort(int[] arr) {
                for(int i = 0;i<arr.length-1;i++) {
                        for(int j = i+1;j<arr.length;j++) {
                                if(arr[i]>arr[j]) {
                                        int temp = arr[i];
                                        arr[i] = arr[j];
                                        arr[j] = temp;
                                }
                        }
                }
        }
       
        public static void print(int[] arr) {
                for(int i=0;i<arr.length;i++) {
                        System.out.print(arr[i]+",");
                }
        }
       
        public static void main(String[] args) {
                int[] arr = {1,2454,45,6,4,12};
                selectsort(arr);
                print(arr);
        }
}

冒泡排序方法

public class dfdfd {
        public static void bubbleSort(int[] arr) {
                for(int i = 0;i<arr.length-1;i++) {
                        for(int j = 0;j<arr.length-i-1;j++) {
                                if(arr[j]>arr[j+1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = temp;
                                }
                        }
                }
        }
       
        public static void print(int[] arr) {
                for(int i=0;i<arr.length;i++) {
                        System.out.print(arr[i]+",");
                }
        }
       
        public static void main(String[] args) {
                int[] arr = {1,2454,45,6,4,12,41};
                bubbleSort(arr);
                print(arr);
        }
}

发现上面两种排序无论什么排序都需要对满足条件的元素进行位置的置换所以可以把这部分相同的代码提取出来单独封装成一个函数,
if(arr[j]>arr[j+1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = temp;
                                }
可以把这两个排序相同的置换方法封装成一个类

public static void swap(int[] arr,int a,int b) {
        if(arr[a]>arr[b]){
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }
}



数组中查找问题普通查找
public static void main (String[] args) {
        int [] arr = {1,2,3,54,8,7,6};
        int index = getIndex(arr,54);
        System.out.println(“index=”+index);
}

public static int getIndex(int [] arr, int key) {
        for(int i=1;i<arr.length;i++) {
                if(arr[i]  ==  key) {
                return i;
}
}
return -1;
}

折半查找
第一种方法以要查找的数为条件
public static void main(String[] args) {
                int[] arr = {1,2,5,7,8,15,56};
                int  x = hilfSearch(arr,8);
                System.out.println(x);
        }
       
        public static int hilfSearch(int[] arr, int key) {
                int min = 0;
                int max = arr.length;
                int mid = (min+max)/2;
                while(key != arr[mid]) {
                        if(key > arr[mid]) {
                                min = mid+1;
                        }
                        else if(key<arr[mid]) {
                                max = mid-1;
                        }
                        if(min>max) {
                                return -1;
                        }
                       
                        mid = (min+max)/2;
                       
                }
                return mid;
        }

第二种方法一最大角标和最小角标做条件

public class dfdfd {
        public static void main(String[] args) {
                int[] arr = {1,2,5,7,8,15,56};
                int  x = hilfSearch(arr,56);
                System.out.println(x);
        }
       
        public static int hilfSearch(int[] arr, int key) {
                int min = 0;
                int max = arr.length;
                int mid;
                while (min <= max) {
                        mid = (min+max)/2;
                        if(key>arr[mid]) {
                                min = mid + 1;
                        }
                        else if(key<arr[mid]) {
                                max = mid - 1;
                        }
                        else
                         return mid;
                }
                return -1;
        }
}

十进制转换成2进制
        public static void main(String[] args) {
                toBin(6);
               
        }
       
        public static void toBin(int a) {
                StringBuffer ss = new StringBuffer();
                while(a>0) {
                        ss.append(a%2);
                        a = a/2;
                }
                System.out.println(ss.reverse());
        }

十进制转换成2进制
查表法
public static void main(String[] args) {
                toHex(-6);
        }
       
        public static void toHex(int a) {
                StringBuffer sb = new StringBuffer();
                char[] ch = {'0','1',};
                while(a != 0) {
                        int temp = a&1;
                        sb.append(ch[temp]);
                        a = a >>> 1;
                }
                System.out.println(sb.reverse());
        }


十进制转换成16进制
public class dfdfd {
        public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer ss = new StringBuffer();
                for(int i=1; i<8;i++) {
                        int temp = a&15;
                        if(temp>9) {
                                ss.append((char)(temp-10+'A'));
                        }
                        else {
                                ss.append(temp);
                        }
                        a = a >>> 4;
                }
                System.out.println(ss.reverse());
        }
}

十进制转换成16进制第二种方法
public class dfdfd {
        public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer ss = new StringBuffer();
                        while(a>0) {
                                int temp = a%16;
                                if(a>9) {
                                        ss.append((char)(temp-10+'A'));
                                }
                                else {
                                        ss.append(temp);
                                }
                                a = a/16;
                        }
                System.out.println(ss.reverse());
        }
}

十进制转换成16进制第三种之查表发
public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer sb = new StringBuffer();
                char[] ch = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F',};
                while(a != 0) {
                        int temp = a&15;
                        sb.append(ch[temp]);
                        a = a >>> 4;
                }
                System.out.println(sb.reverse());
        }

作者: 付鹏    时间: 2012-3-11 21:28
靠 格式怎么还有变了的     复制上面来就变形了  = =  还好变得不是太厉害




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