JavaSE基础复习:ArrayTools工具类
2012-12-02 10:51
218 查看
------- android培训、java培训、期待与您交流! ----------
/* 数组工具类: java.util.Arrays 方法: print(arr) 打印数组; selectSort_1(arr) 选择排序1 selectSort_2(arr) 选择排序2 bubbleSort(arr) 冒泡排序 reverse(arr) 数组倒置 getIndex(arr,key) 查找key在arr中的角标 binarySearch(arr,key) arr为升序数组,二分法查找key,返回角标,如果不存在,返回值为key在数组中的位置 max(arr) 获取最大值 min(arr) 获取最小值 */ public class ArrayTools { public static void main(String[] args) { int[] arr = {5,2,7,21,12,44,1}; print(arr); selectSort_2(arr); print(arr); reverse(arr); print(arr); selectSort_1(arr); print(arr); reverse(arr); print(arr); bubbleSort(arr); print(arr); System.out.println(getIndex(arr,4) + " 二分法结果 " + binarySearch(arr,4) + " max=" + max(arr) + " min=" + min(arr)); //本二分法查找只能查找升序数组 } //---打印数组 public static void print(int[] arr) { System.out.print("["); for(int i=0; i<arr.length; i++) { if(i!=arr.length-1) System.out.print(arr[i] + ","); else System.out.println(arr[i] + "]"); } } /* 选择法排序,升序 */ public static void selectSort_1(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]) swap(arr,i,j); } } } public static void selectSort_2(int[] arr) { for(int i=0; i<arr.length-1; i++) { int min = i; for(int j=i+1; j<arr.length; j++) { if(arr[min]>arr[j]) min = j; } if(i!=min) swap(arr,i,min); } } /* 冒泡法排序,升序 */ 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]) swap(arr,j,j+1); } } } //---两个位置交换 private static void swap(int[] arr, int x, int y) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } //---数组最大值 public static int max(int[] arr) { int index = 0; for(int i=0; i<arr.length; i++) { if(arr[i]>arr[index]) index = i; } return arr[index]; } //---数组最小值 public static int min(int[] arr) { int index = 0; for(int i=0; i<arr.length; i++) { if(arr[i]<arr[index]) index = i; } return arr[index]; } //---二分法查找,数组arr为升序数组,如果存在key,则返回key在数组中的位置,否则返回-1 public static int binarySearch(int[] arr, int key) { int min=0, mid, max=arr.length-1; while(min<=max) { mid = (min+max)>>1; if(key > arr[mid]) min = mid +1; else if(key < arr[mid]) max = mid - 1; else return mid; } return -min-1; //---如果需要得到key要插入的位置,因为min就是要插入的位置,可以返回-min-1,-1是为了和0角标区别开。 } //---普通查找,获取key第一次出现的位置 public static int getIndex(int[] arr, int key) { for(int i = 0; i < arr.length; i++) { if(arr[i] == key) return i; } return -1; } //---数组倒置 public static void reverse(int[] arr) { for(int i=0,j=arr.length-1; i<j; i++,j--) { swap(arr,i,j); } } }------- android培训、java培训、期待与您交流! ----------
相关文章推荐
- JavaSE复习之五 基础知识:接口
- JavaSE基础复习五:集合和集合框架
- JavaSE复习之一 基础知识:Java的基础语法 补充(3)
- JavaSE复习之二 基础知识:面向对象 补充 (5)
- javase基础入门复习笔记
- JavaSE基础复习三:异常机制知识点
- 黑马程序员----【javaSE基础】个人总结--常识复习
- JavaSE复习之一 基础知识:Java的基础语法 补充(2)
- javase基础入门复习笔记二
- javase基础复习攻略《五》
- JavaSE基础复习-2
- JavaSE复习之六 基础知识:抽象类
- 黑马程序员----【JavaSE基础】视频第一天复习笔记
- javase基础入门复习笔记三
- JavaSE复习之七 基础知识:内部类
- JavaSE复习之二 基础知识:面向对象 补充(4)
- (JavaSE)基础内容复习
- JavaSE复习之八 基础知识:泛型
- JavaSE复习之四 基础知识:集合 补充(2)
- javase基础入门复习笔记四