数组及常见操作
2016-03-17 23:09
405 查看
class ArrayDemo { public static void main(String[] args) {//格式1:不明确具体数据 int [] arr=new int [3]; //arr=null;//原本指向数组的arr指向空,切断地址联系 System.out.println(arr);//显示[I@2a139a55 //@为分界线,左边[表示数组型,I表示Int,2a139a55表示其在内存里的哈希值,用于在不知对象类型时,测试其类型 //格式2 int [] arr2 = new int [] {1,2,3,4}; int [] arr3 = {21,35,56,2,48,101}; printArr(arr2);//输出数组 System.out.println("Max = "+maxArray(arr3));//输出最大值 printArr(arr3); System.out.println(getIndex(arr3,2));//顺序查找 System.out.println(getIndex(arr3,3));// 输出-1 //sortChose(arr3);//选择排序 //sortBubble(arr3);//冒泡排序 sortSelect_2(arr3);//改良选择排序 printArr(arr3); System.out.println(binarySearch(arr3,35));//折半查找 System.out.println(binarySearch(arr3,36));//折半查找无此元素输出-1 System.out.println(halfSearch(arr3,35)); System.out.println(halfSearch(arr3,36)); } //数组查找_顺序查找,效率低,但对数据无要求 public static int getIndex(int [] arr, int key) { for (int i = 0;i<arr.length ;i++ ) { if (key==arr[i]) { return i; } } return -1;//查找无此元素 } //折半查找(二分查找),要求数组有序 public static int binarySearch(int [] arr,int key) { int right = 0,left = arr.length-1,mid ; while (right<=left) { mid = (right+left)>>1; if (key<arr[mid]) left = mid - 1; else if (key>arr[mid]) right = mid +1; else return mid; } return -1;//没找到 } //折半查找的另一种写法 public static int halfSearch( int [] arr, int key ) { int right = 0,left = arr.length-1,mid = (right + left)>>1 ; while (key!=arr[mid]) { if (key<arr[mid]) left = mid - 1; else if (key>arr[mid]) right = mid +1; if(right>left) return -1; mid = (right + left)>>1 ; } return mid; } //chose排序2,改良版选择排序 public static void sortSelect_2(int [] arr) { for (int i = 0;i<arr.length -1;i++ ) { int index=i;//记录一轮比较下来的最小值的下标 for (int j = i+1;j <arr.length ;j++ ) { if(arr[index]>arr[j]) { index=j;//记录最小值下标 } } //一轮结束时交换 if (index!=i) { swap(arr,index,i); } } } //冒泡排序 public static void sortBubble(int [] arr) { //方法一 for (int i = 0;i<arr.length-1 ;i++ )//-1最后一个不用比 { for (int j = 0; j<arr.length-1-i ;j++ )//-1避免最后一个比较时超出下标范围 { if (arr[j]>arr[j+1])//相邻的比较,不能用j++,也不能用++j { swap(arr,j,j+1); } } } /* //方法二 for (int i = arr.length-1; i>0 ;i-- ) { for (int j = 0;j<i ; j++ ) { if (arr[j]>arr[j+1])//相邻的比较 { swap(arr,j,j+1); } } } */ } //选择排序 public static void sortChose(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 printArr( int [] arr) { System.out.print("[ "); for (int i = 0;i<arr.length ;i++ ) { if (i==arr.length-1) System.out.println(arr[i]+" ]"); else System.out.print(arr[i]+", "); } } //输出数组中最大值 public static int maxArray (int [] arr){ //方法一,记录最大数据 int maxElement = arr[0]; for (int i = 0;i<arr.length ;i++ ) { if( arr[i]>maxElement) maxElement=arr[i]; } return maxElement; //方法二,记录下标 /* int maxIndex=0; for (int i = 0;i<arr.length ;i++ ) { if(arr[i]>arr[maxIndex]) maxIndex=i; } return arr[maxIndex]; */ } //swap函数.交换 public static void swap(int [] arr,int a,int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } }
相关文章推荐
- 在命令行用 sort 进行排序
- 文件遍历排序函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#选择排序法实例分析
- C#动态调整数组大小的方法
- C#插入法排序算法实例分析
- 详解Lua中的数组概念知识
- C#实现Datatable排序的方法
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- SQLSERVER的排序问题结果不是想要的
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- Windows Powershell排序和分组管道结果
- C#通过yield实现数组全排列的方法