• java(数组及常用简单算法 )


    数组

    数组:数组是存储同一种数据类型数据的集合容器。

    数组的定义格式:
    数据类型[]  变量名  =  new  数据类型[长度];

    数组的好处:对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是:长度-1。

    局部变量:如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。

    成员变量:成员变量就是定义在方法之外,类之内的.

    数组中最常见的问题:

    1.NullPointerException 空指针异常原因:引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
    2.ArrayIndexOutOfBoundsException索引值越界。原因:访问了不存在的索引值。

    数组的初始化方式:

    动态初始化:
    	数据类型[] 变量名 = new 数据类型[长度];
    
    静态初始化:	
    	数据类型[] 变量名 = {元素1,元素2.....};
    

    如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果数据一开始还不太明确,这时候就建议使用动态初始化。

    class Demo7 {
    	public static void main(String[] args) {	
    		//动态初始化
    		//int[] arr = new int[10];
    	
    		//静态初始化
    		int[] arr = {10,20,30,40,50};
    		for(int index = 0 ; index<arr.length ; index++){
    			 System.out.print(arr[index]+",");
    		}
    	/*
    		int[] arr = new int[50];
    		Scanner scanner = new Scanner(System.in);
    		for(int i  = 0 ; i< arr.length ; i++){
    			arr[i] = scanner.nextInt();
    		}
    		*/
    	}
    }
    
    class Demo8 {
    	public static void main(String[] args) 
    {
    		int[] arr = {-12,-14,-5,-26,-4};
    		int max = getMax(arr);
    		System.out.println("最大值:"+ max); 
    	}
    
        public static int  getMax(int[] arr) {
    		int max = arr[0]; //用于记录最大值
    		for(int i = 1 ; i < arr.length ; i++){
    			if(arr[i]>max){  //如果发现有元素比max大,那么max变量就记录该元素。
    				max = arr[i];
    			}
    		}
    		return max;
    	}
    }
    

    选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

    class Demo9 {
    	public static void main(String[] args) {
    		int[] arr = {12,5,17,8,9};  //对于5元素的数组,只需要找出4个最大值就可以排序了。
    		selectSort(arr);
    	}
    	
    	public static void selectSort(int[] arr) {
    		//把最大值放在首位置。
    		for(int j = 0; j<arr.length-1; j++){  //  控制的是轮数。
    			for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
    				if(arr[i]>arr[j]){
    					//交换位置
    					int temp = arr[i];
    					arr[i] = arr[j];
    					arr[j] = temp;
    				}
    			}
    		}		
    		//遍历数组,查看效果
    		System.out.print("目前的元素:");
    		for (int i = 0 ; i<arr.length  ;i++){
    			System.out.print(arr[i]+",");
    		}
    	}
    }
    

    冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。

    class Demo10 {
    	public static void main(String[] args) {
    		int[] arr = {12,8,17,5,9}; // 最大的索引值: 4   容量:5 
     		bubbleSort(arr);
    	}
    
    	public static void bubbleSort(int[] arr){
    		// 把最大值放在最后一个位置
    		for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
    			for(int i = 0 ; i<arr.length-1-j  ; i++){  // 找出一个最大值  
    				//相邻的元素比较
    				if(arr[i]>arr[i+1]){
    					int temp  = arr[i];
    					arr[i] = arr[i+1];
    					arr[i+1] = temp;
    				}
    			}
    		}
    		//遍历数组,查看效果
    		System.out.print("目前的元素:");
    		for (int i = 0 ; i<arr.length  ;i++){
    			System.out.print(arr[i]+",");
    		}
    		
    	}
    }
    

    折半查找法(二分法): 使用前提必需是有序的数组。

    class Demo12 {
    	public static void main(String[] args) {
    		int[] arr = {12,16,19,23,54};
    		//int index = searchEle(arr,23);
    		int index = halfSearch(arr,116);
    		System.out.println("元素所在的索引值是:"+ index);
    	}	
    	public static int halfSearch(int[] arr, int target){
    		//定义三个变量分别记录最大、最小、中间的查找范围索引值
    		int max = arr.length-1;
    		int min = 0;
    		int mid = (max+min)/2;
    		while(true){
    			if(target>arr[mid]){
    				min = mid+1;
    			}else if(target<arr[mid]){
    				max = mid -1;
    			}else{
    				//找到了元素
    				return mid;
    			}
    			//没有找到的情况
    			if (max<min){
    				return -1;
    			}
    			//重新计算中间索引值
    			mid = (min+max)/2;
    		}
    	
    	}
    
    	public static int searchEle(int[] arr, int target) {
    		for(int i = 0 ; i<arr.length ; i++){
    			if(arr[i]==target){
    				return i;
    			}
    		}
    		return -1;
    	}
    }
    

    二维数组: 二维数组就是数组中的数组。

    二维数组的定义格式:

    数据类型[][] 变量名 = new 数据类型[长度1][长度2];

    二维数组 的初始化方式:

    动态初始化:
    数据类型[][] 变量名 = new 数据类型[长度1][长度2];  
    
    静态初始化:
    数据类型[][]  变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..}
    
    class Demo16 {
    	public static void main(String[] args) {
    		int[][] arr = {{10,11,9},{67,12},{33,35,39,40}};
    		//遍历二维数组
    		for(int i = 0;  i <arr.length ; i++){
    			for(int j = 0 ; j<arr[i].length ; j++){
    				System.out.print(arr[i][j]+",");
    			}
    			//换行
    			System.out.println();
    		}
    	}
    }
    

    数组的特点:

    1.数组只能存储同一种数据类型的数据。
    2.数组是会给存储到数组中的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1;
    3.数组一旦初始化,长度固定。
    4.数组中的元素与元素之间的内存地址是连续的。

  • 相关阅读:
    UNIX网络编程之旅配置unp.h头文件环境[ 转]
    C++著名程序库
    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
    网络库介绍
    置顶问题
    最近做的一个项目
    Storm 遇到问题?
    海量算法视频下载
    Quartz.NET作业调度框架详解
    c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
  • 原文地址:https://www.cnblogs.com/intelwisd/p/8038929.html
Copyright © 2020-2023  润新知