• 数组(复习)


    数组是一个变量,存储相同数据类型的 一组数据。(数组定义完成后长度是不可变的)

    数组的基本要素:

    标识符(数组名)、数组元素、元素下标:从0开始、元素类型(int类型)

    数组与内存和变量与内存

    栈内存:由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。注意,const局部变量也储存在栈区内,栈区向地址减小的方向增长。(一般存放基本数据类型、引用)
    堆内存:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。分配的速度较慢,地址不连续,容易碎片化。此外,由程序员申请,同时也必须由程序员负责销毁,否则则导致内存泄露。(一般存放所有new出来的对象,对象的引用放在栈中)

    内存空间分为栈内存与堆内存。

    数组名放入栈内存,数组元素放在堆内存;通过栈内存的数组名找到堆内存的数组元素。

    变量由于比较简单,变量名与变量值都会放在栈内存。

    数组应用的一个例子:在一个排完升序的数组中,手动输入一个值,将这个值插入此数组,不能打乱数组的升序

     冒泡排序

    选择排序

    二分(折半)查找法(排序后再用)


    int arr[] = {2, 6, 11, 13, 16, 17, 22, 30};
    System.out.println("非递归结果,22的位置为:" + binarySearch(arr, 22));
    System.out.println("递归结果,22的位置为:" + binarySearch(arr, 22, 0, 7));
    }

    //非递归
    static int binarySearch(int[] arr, int res) {

    int low = 0;
    int high = arr.length-1;
    while(low <= high) {
    int middle = (low + high)/2;
    if(res == arr[middle]) {
    return middle;
    }else if(res <arr[middle]) {
    high = middle - 1;
    }else {
    low = middle + 1;
    }
    }
    return -1;
    }
    //递归
    static int binarySearch(int[] arr,int res,int low,int high){

    if(res < arr[low] || res > arr[high] || low > high){
    return -1;
    }
    int middle = (low+high)/2;
    if(res < arr[middle]){
    return binarySearch(arr, res, low, middle-1);
    }else if(res > arr[middle]){
    return binarySearch(arr, res, middle+1, high);
    }else {
    return middle;
    }

    是否能找到要查找的数字

    我是代码搬运工!!!
  • 相关阅读:
    centos6:一个网卡上显示多个ip地址的错误
    博客搬家到CSDN:http://blog.csdn.net/yeweiouyang
    Codeforces Round #430 (Div. 2)
    Codeforces Round #430 (Div. 2)
    Codeforces Round #430 (Div. 2)
    Codeforces Round #426 (Div. 2)
    Codeforces Round #427 (Div. 2)
    Codeforces Round #427 (Div. 2)
    Codeforces Round #427 (Div. 2)
    Codeforces Round #427 (Div. 2)
  • 原文地址:https://www.cnblogs.com/FanKL/p/11228795.html
Copyright © 2020-2023  润新知