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.数组中的元素与元素之间的内存地址是连续的。

时间: 2024-10-11 11:21:41

java(数组及常用简单算法 )的相关文章

Java数组的一些基本算法

数组的一些算法问题:  排序:(升序)   选择排序:     求每一轮的最小值:再输出   冒泡排序:     相邻的两个数相比较,把两个数相比较,第一个大于好面的就交换位置   shell排序:   插入排序:  查找:   二分法查找:     class ErFenFa  {   public static void main(String[] args)   {    int []arr={2,4,6,3,1,8,7,9};    System.out.println(binarySe

java数组的常用函数

1 import java.util.*; 2 class 数组索引{ 3 public static void main(String args[]){ 4 //数组中的使用工具:Arrays 5 int[] arr = {1,2,3,4}; 6 //查找数组中是否还有某一个数 7 int num = 3; 8 //如果有就打印对应的索引 9 int result = Arrays.binarySearch(arr,num); 10 System.out.println("对应的索引值如下:&

java几种常用的算法

1)冒泡排序: 依次比较相邻的两个元素,通过一次比较把未排序序列中最大(或最小)的元素放置在未排序序列的末尾. public class BubbleSort { public static void sort(int data[]) { for (int i = 0; i < data.length -1; i++) { for (int j = 0; j < data.length - i - 1; j++) { if (data[j] > data[j + 1]) { int te

java 数组声明

Java 数组声明常用的方式 1.类型  数组名称[] = new 数组类型[个数] 2,类型  数组名称    =  new 数组类型[] {} 3,类型[] 数组名称 = {} //类型 数组名[] = new 数组类型 [个数] int $arr[] = new int [4]; $arr[0] = 1; $arr[1] = 2; $arr[2] = 3; $arr[3] = 4; //类型 数组名称 = new 数组类型[]{} int $arr1[] = new int[]{1,2,3

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

Java 常用排序算法/程序员必须掌握的 8大排序算法

Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n 个数插到前

Java Arrays类对数组的常用操作

1.数据的遍历 public class TestClass { public static void main(String[] args) { /*二维数组,每一维可以不一样*/ int a[][] = new int[][]{{1,2,3},{4,5,6},{8,9,10,7}}; Arrays.sort(a[2]); for(int i=0; i<a.length; i++) { for(int j=0; j<a[i].length; j++) { System.out.println

[转载]Java数组扩容算法及Java对它的应用

原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arrays.copyOf()可以简便的创建数组副本. 5)创建数组副本的同时将数组长度增加就变通的实现了数组的扩容.  源码展示: 1 public class Array

【线性表基础】基于线性表的简单算法【Java版】

本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeRepeat(LinkList L) { Node node = L.head.next; // 首结点 while (node != null) // 一重循环,遍历L中的每一个元素 { // Object data=p.data; Node p = node; // q结点的前驱 Node q =