Java基础第一阶段——05_Java语言基础_数组操作&排序&查找

  • 学习视频:毕向东35天Java基础_毕向东
  • 录制时间:2012年2月19日
  • 视频目录:

java数组基础头歌实践平台答案 java数组教学视频_java数组基础头歌实践平台答案

  • 视频时长:1小时24分钟 + 1小时54分钟 + 1小时13分钟
章节 使用 # 
每日视频 ##

01-Java基础(数组-第二种定义格式)

  • 第一种格式:不知道具体的值
  • int[] arr = new int[3];
  • 第二种格式:知道具体的值
  • int[] arr = new int[]{1,2,3,4,5};
  • int[] arr = {1,2,3,4,5};

02-Java基础(数组-常见操作-遍历)

  • for循环
  • 数组的一个属性
  • length

倒序遍历

03-Java基础(数组-常见操作-最值)

  • 两种方式
  • 取脚标index
  • 取值element

04-Java基础(数组-常见操作-选择排序)

  • 排序
  • 选择排序
  • 冒泡排序
  • 选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

code:

java数组基础头歌实践平台答案 java数组教学视频_数组_02

05-Java基础(数组-常见操作-冒泡排序)

  • 冒泡排序
  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

code:

java数组基础头歌实践平台答案 java数组教学视频_java数组基础头歌实践平台答案_03

Java类中自带的排序:Arrays.sort(arr);

最快的排序:希尔排序

06-Java基础(数组-常见操作-排序位置置换代码提取)

抽取swap方法:交换数组中两个数据的位置swap(int[] arr,int x,int y)

07-Java基础(数组-排序的性能问题)

public static void selectSort(int[]a)
{
    if((a==null)||(a.length==0))
        return;
    int minIndex=0;
    int temp=0;// 可以改为temp = a[0];
    for(int i=0;i<a.length-1;i++)
    {
        minIndex=i;//无序区的最小数据数组下标
        for(intj=i+1;j<a.length;j++)
        {
            //在无序区中找到最小数据并保存其数组下标
            if(a[j]<a[minIndex])
            {
                minIndex=j;
            }
        }
        if(minIndex!=i)
        {
            //如果不是无序区的最小值位置不是默认的第一个数据,则交换之。
            temp=a[i];
            a[i]=a[minIndex];
            a[minIndex]=temp;
        }
    }
}

code:

java数组基础头歌实践平台答案 java数组教学视频_Java_04

08-Java基础(数组-常见功能-查找)

  • 基础:for循环实现+判断

09-Java基础(数组-常见功能-折半查找)

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

10-Java基础(数组-常见功能-折半查找练习)

code:

public static int halfSearch(int[] arr,int key)
{
    int max,min,mid;
    min = 0;
    max = arr.length-1;
    mid = (max+min)/2;

    while(arr[mid]!=key)
    {
        if(key>arr[mid])
            min = mid + 1;
        else if(key<arr[mid])
            max = mid - 1;

        if(max<min)
            return -1;

        mid = (max+min)/2;
    }
    return mid;
}

code2:

public static int halfSearch_2(int[] arr,int key)
{
    int max,min,mid;
    min = 0;
    max = arr.length-1;

    while(min<=max)
    {
        mid = (max+min)>>1;

        if(key>arr[mid])
            min = mid + 1;
        else if(key<arr[mid])
            max = mid - 1;
        else
            return mid;
    }
    return -1;
}

给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么个元素的存储的角标为如何获取。
{13,15,19,28,33,45,78,106};

code1:

public static int halfSearch_2(int[] arr,int key)
{
    int max,min,mid;
    min = 0;
    max = arr.length-1;

    while(min<=max)
    {
        mid = (max+min)>>1;

        if(key>arr[mid])
            min = mid + 1;
        else if(key<arr[mid])
            max = mid - 1;
        else
            return mid;
    }
    return min;
}

int index = Arrays.binarySearch(arr,45);//如果存在返回的具体的角标位置,不存在返回的是 -插入点-1

public static int halfSearch_2(int[] arr,int key)
{
    int max,min,mid;
    min = 0;
    max = arr.length-1;

    while(min<=max)
    {
        mid = (max+min)>>1;

        if(key>arr[mid])
            min = mid + 1;
        else if(key<arr[mid])
            max = mid - 1;
        else
            return mid;
    }
    return -min-1;//如果存在返回的具体的角标位置,不存在返回的是  -插入点-1
}

11-Java基础(进制转换_1)

获取一个整数的16进制表现形式。

code1:

public static void toHex(int num)
{

    for(int x=0; x<8; x++)
    {
        int temp = num & 15;
        if(temp>9)
            System.out.print((char)(temp-10+'A'));
        else
            System.out.print(temp);
        num = num >>> 4;
    }
    /*
    int n1 = num & 15;
    System.out.println("n1="+n1);

    num = num >>> 4;
    int n2 = num & 15;
    System.out.println("n2="+n2);
    */
}

12-Java基础(进制转换_2-查表法)

什么时候使用数组呢?
如果数据出现了对应关系,而且对应关系的一方是有序的数字编号。并作为角标使用。
这时就必须要想到数组的使用。

就可以将这些数据存储到数组中。 
根据运算的结果作为角标直接去查数组中对应的元素即可。

这种方式:称为查表法。

code2:

public static void toHex_2(int num)
{

    if(num==0)
    {
        System.out.println("0");
        return ;
    }
    //定义一个对应关系表。
    char[] chs = {'0','1','2','3',
                    '4','5','6','7',
                    '8','9','A','B',
                    'C','D','E','F'};
    /*
    一会查表会查到比较的数据。
    数据一多,就先存储起来,在进行操作。
    所以定义一个数组。 临时容器。
    */
    char[] arr = new char[8];
    int pos = arr.length;

    while(num!=0)
    {
        int temp = num&15;
        arr[--pos] = chs[temp];
        num  = num >>> 4;
    }

    System.out.println("pos="+pos);
    for(int x=pos ;x<arr.length; x++)
    {
        System.out.print(arr[x]);
    }


}

13-Java基础(进制转换_整合)

二进制 八进制 十六进制

class ArrayTest3 
{
    public static void main(String[] args) 
    {
//      toHex(26);
        toBinary(-6);// 注意负数
//      toOctal(26);
        System.out.println(Integer.toBinaryString(-6));
    }

    //十进制-->十六进制。
    public static void toHex(int num)
    {
        trans(num,15,4);
    }
    //十进制-->二进制。
    public static void toBinary(int num)
    {
        trans(num,1,1);
    }
    //十进制-->八进制。
    public static void toOctal(int num)
    {
        trans(num,7,3);
    }

    public static void trans(int num,int base,int offset)
    {

        if(num==0)
        {
            System.out.println("0");
            return ;
        }
        //定义一个对应关系表。
        char[] chs = {'0','1','2','3',
                        '4','5','6','7',
                        '8','9','A','B',
                        'C','D','E','F'};
        /*
        一会查表会查到比较的数据。
        数据一多,就先存储起来,在进行操作。
        所以定义一个数组。 临时容器。
        */
        char[] arr = new char[32];
        int pos = arr.length;

        while(num!=0)
        {
            int temp = num & base;
            arr[--pos] = chs[temp];
            num  = num >>> offset;
        }

        for(int x=pos ;x<arr.length; x++)
        {
            System.out.print(arr[x]);
        }
        System.out.println();

    }

}

14-Java基础(查表法练习)

code:

class ArrayTest4 
{
    public static void main(String[] args) 
    {
        String week = getWeek(71);
        System.out.println(week);
    }
    /*
    使用查表法。
    星期。
    String s = "abc";
    int x = 4;
    */
    public static String getWeek(int num)
    {

        if(num>7 || num<1)
        {
            return "错误的星期";
        }
        String[] weeks = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

        return weeks[num];
    }

}

Day05 End.