黑马程序员_数组2

来源:互联网 发布:淘宝网大童童装 编辑:程序博客网 时间:2024/06/14 18:59


-----------------------------------------------------------------android培训、java培训、期待与您交流! ----------------------------------------------------------------

1 数组中的元素排序

    排序是一种常见的操作,在数据结构的课程中介绍过很多种排序的方法。

1.1 选择排序(按照从升序说明)

     原理:选择固定的位置与其他元素进行比较,如果后者比前者小,交换两者数据,一轮比较结束后第一个位置就是最小值;第二轮然后从第二个元素开始以此与后面的元素比较;依次类推,直到比较到最后一个元素,无需比较。所以如果有n个元素时,只需比较n-1轮。

class ArrayDemo4{public static void main(String[] args) {int[] arr = new int[]{9,7,2,5,3,1};selectSort(arr);printArray(arr);}//选择排序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[j]<arr[i]) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}//打印数组的值,元素之间用逗号隔开public static void printArray(int[] arr){System.out.print("[");for (int i=0; i<arr.length; i++) {if (i<arr.length-1) System.out.print(arr[i]+",");elseSystem.out.println(arr[i]+"]");}}}

1.2 冒泡排序(按照升序说明)

     原理:比较相邻两数的大小,如果后者小于前者,则对换数据。

class ArrayDemo4{public static void main(String[] args) {int[] arr = new int[]{9,7,2,5,3,1};bubbleSort(arr);printArray(arr);}//冒泡排序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+1]<arr[j]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}//打印数组的值,元素之间用逗号隔开public static void printArray(int[] arr){System.out.print("[");for (int i=0; i<arr.length; i++) {if (i<arr.length-1) System.out.print(arr[i]+",");elseSystem.out.println(arr[i]+"]");}}}

         数组在堆区中,在堆内存中比较数据,比较消耗资源,性能不高。可以在比较过程中先不对换数据,而是记录下需要对换数据的下标,当所有数据都比较完,确定最终所在的位置时,再进行对换,这样可以提高效率。

其实java中有一个java.util.Arrays类操作数组,所有的方法都是静态方法,其中sort( )方法就是把数组的元素按升序排序。

2 数组查找

2.1 折半查找

/**  * 折半查找 */class ArrayDemo5{public static void main(String[] args) {int[] arr = new int[]{1,2,3,5,7,9};int index = halfSearch(arr,3);int index_2 = halfSearch_2(arr,3);System.out.println("index = "+index);System.out.println("index_2 = "+index_2);}//折半查找的前提是数组中元素是有序的public static int halfSearch(int[] arr, int key){int min = 0;int max = arr.length-1;int mid = (min+max)/2;while(arr[mid]!=key){//判断如果不是关键值key就循环折半if(key>arr[mid]){min = mid+1;}else if(key<arr[mid]) {max = mid-1;}if (min>max) {//没有找到返回-1return -1;}mid = (min+max)/2;}return mid;}//折半查找的第二种方法public static int halfSearch_2(int[] arr, int key){int min = 0;int max = arr.length-1;int mid = (min+max)/2;while(min<=max){//如果最小值的下标小于等于最大值得下标就循环折半if (key>arr[mid]) {min = mid+1;}else if(key<arr[mid]){max = mid-1;}else{return mid;}mid = (min+max)/2;}return -1; //跳出循环没有找到关键值返回-1}}

0 0
原创粉丝点击