• 第四节 数组的排序和查找


    插入排序

    插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。

    例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;

    第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;

    第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......

    第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。

    以下面5个无序的数据为例:

    65 27 59 64 58 (文中仅细化了第四次插入过程)

    第1次插入: 27 65 59 64 58

    第2次插入: 27 59 65 64 58

    第3次插入: 27 59 64 65 58

    第4次插入: 27 58 59 64 65

    int array[] = { 3, 4, 2, 1, 5, 6, 9, 8, 7, 0 };


    for (int i = 1; i < array.length; i++) {

    int j = i;               // i = 1 ; j = 1

    int temp = array[i];

    while (j > 0 && temp < array[j - 1]) {

    int a = array[j];

    array[j] = array[j - 1]; // array[2] = array[1];

    array[j - 1] = a;

    j--; }

    System.out.println("第" + i + "次移动后:");

    for (int i1 = 0; i1 < array.length; i1++) {

    System.out.print("," + array[i1]);

    }

    System.out.println();

    array[j] = temp;

    }

    System.out.println("array 直接插入排序之后:");

    for (int i = 0; i < array.length; i++) {

    System.out.println("array[" + i + "] = " + array[i]);

    数组的查找

    方法(折半查找)

    折半查找可以提高效率,但是必须要保证我们的数组是有序的。
    方法一 public int halfsearch1(int[] arr,int a){ //查找输入的数组元素a是否在数组里面,在,显示角标,不在为-1 int start,max,mid; int start = 0; int max = arr.length - 1; int mid = (start+max)/2; while(arr[mid] != a){ //中间元素值不等于输入元素值 if(a > arr[mid]){ //输入元素值大于中间元素值 start = mid + 1; //开始角标等于中间值与最大值里面的一个元素值 }else{ max = mid - 1; //最大角标等于最小元素与中间元素之间 } if(start > max){ //最小角标大于最大角标 return -1; } mid = (max+start)/2; //中间角标等于自己 } return mid; }

    方法二
    public int halfsearch2(int[] arr,int a){
    int start = 0,max = arr.length-1,mid;
    while(start <= max){ //开始角标小于等于最大角标
    mid = (max + start)/2; //中间角标等于自己
    if(a > arr[mid]){ //元素a的值大于中间角标的值
    start = mid + 1; //开始角标等于中间角标与最大角标之间
    }else if(a < arr[mid]){ //元素a的值小于中间角标的值
    max = mid - 1; //最大角标等于最小角标与中间角标之间
    }else{
    return mid;
    }
    }
    return -1;
    }

  • 相关阅读:
    飞腾2000+上面银河麒麟v10 安装virt-manager创建虚拟机的操作过程
    postgresql重置序列起始值
    行为链分析zipkin
    Elasticsearch冷热分离原理和实践
    Window 各个版本对应的版本号大全
    为何fdisk和df 输出的信息不一致?
    Java使用ConcurrentHashMap实现简单的内存式缓存
    Linux系统中如何查找大文件或文件夹的方法
    Class.newInstance()与Constructor.newInstance()创建对象
    Wazuh完整性监测和命令监测注册表并邮件告警
  • 原文地址:https://www.cnblogs.com/xiaoshuaidiboke/p/7143535.html
Copyright © 2020-2023  润新知