数组常见排序与查找

冒泡排序:

  相邻元素两两比较,大的往后放。第一次排序完毕后,最大值就出现在最大索引出。此方法排序需要比较数组长度-1次

int[] arr = { 24, 65, 87, 57, 12,};
for (int i = 0; i < arr.length-1; i++) {
    for (int j = 0; j < arr.length-1-i; j++) {
        if(arr[j]>arr[j+1]){
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

选择排序:

  从0索引开始,一次和后面元素比较,小的往前放,第一次比较完毕后,最小值出现在最小索引处。

int[] arr = { 24, 65, 87, 57, 12,};
for (int i = 0; i < arr.length-1; i++) {
    for (int j = i+1; j < arr.length; j++) {
        if(arr[i]>arr[j]){
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
}

二分查找(折半查找):

  前提:数组必须是有序的。

  思想:每次都计算中间的那个元素,比较元素与中间数的大小,就能减少一半的元素。

public static int getIndex(int[] arr,int value){
    int max = arr.length-1;
    int min = 0;
    int mid = (max+min)/2;
    while (arr[mid]!=value) {
        if (arr[mid]>value) {
            max = mid-1;
        }else if (arr[mid]<value) {
            min = mid+1;
        }
        if(min>max){
            return -1;
        }
        mid = (max+min)/2;
    }
    return mid;
}
时间: 2024-12-12 17:53:45

数组常见排序与查找的相关文章

(八)数组以及排序和查找

JavaSE(八) --数组以及排序和查找 一.数组的定义 三种定义方法: int b[]=new int[5]; Int []b=new int[5]; int[] a=new int[5]; (建议使用这种定义方法) //必须规定数组长度,因为在编译的时候就要分配内存. 我们也可以在定义的时候就初始化数组 Int[] a={1,2,3,3,5}; 这默认了数组a的长度是5. 分配内存详情如下: 开辟一块内存,有5个小块,a指向数组的首地址. int[][] b=new int[5][];  

数组的排序与查找

/**对如下一个数组int[] iarr={34,67,1,56,32,78,12,45,79,4,57,102,123,3};进行排序(采用自己擅长的排序算法),然后查询排序之后的采用二分查找*法查找45在在数组的索引值 ,排序.查找封装成方法,然后在main方法中调用测试.*/ public class FenDou01 { public static void main(String[] args) { int[] iarr={34,67,1,56,32,78,12,45,79,4,57,

第四节 数组的排序和查找

插入排序 插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序. 例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序: 第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中: 第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中...... 第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序. 以下面5个无序的数据为例: 65 27 59 64 58

php的数组、排序、查找

//创建数组,其值可以放任意的数据类型     $arr[0]=111;     $arr[1]=121;     $arr[2]="nihao";     $arr[3]=141.9;     $arr[4]=null;//null要记入长度,并要占用空间,但是不会输出     echo "数组长度".count($arr);       //遍历数组中的值   for($i=0;$i<count($arr);$i++){         echo &quo

java学习第05天(数组常见操作、数组中的数组)

(4)数组常见操作 a.遍历取值 class ArrayDemo3 { public static void main(String[] args) { //System.out.println("Hello World!"); //格式1 /* 需要一个容器,但不明确容器的具体数据. */ //int[] arr = new int[8]; //格式2 /* 需要一个容器,储存一直的具体数据. */ //元素类型[] 数组名 = new 元素类型[](元素,元素,....); //i

java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例

java 数组比较,元素的比较,自定义Comparator的实现,排序,查找示例 package org.rui.array.compar; import java.util.Arrays; import java.util.Random; import org.rui.generics.anonymity.Generator; /** * 程序设计的基本目标是"将保持不变的事物与会发生改变的事物相分离" * 而这是,不变的是通用的排序算法,变化的是各种对象相互比较的方式, * 因此,

数组的高级(排序和查找)

1.冒泡排序:相邻元素两两比较,大的向后方法,第一次完毕后,最大值就出现在了最大索引出.同理,继续,即可得到一个排好序的数组. 2.冒泡排序的规则: 1).两两比较,大的往后方法. 2).第一次比较完毕后,下一次比较的时候就会减少一个元素的比较. 3).第一次比较,有0个元素不比. 第二次比较,有1个元素不比. 第三次比较,有2个元素不比. ...... 4).总共需要比较数组的长度-1次. 3.冒泡排序图解 4.代码实现 package cn; /**  * 数组排序之冒泡排序   */ pu

JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理

壹 ? 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但我觉得大家至少应该掌握一种,这样在面试能解决大部分数组问题.在了解实现思路后,日常开发中结合实际场景优化实现,提升性能也是后期该考虑的. 本文主要围绕数组去重.数组排序.数组降维.数组合并.数组过滤.数组求差集,并集,交集,数组是否包含某项等知识点展开,附带部分知识拓展,在看实现代码前也建议大家先自

9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置

/** * 功能:对字符串数组进行排序,将所有的变位词排在相邻的位置. */ 两种方法: 方法一: /** * 思路:套用排序算法,并修改比较器.这里比较器用来指示两个字符串胡伟变位词就是相等的. * @param array */ public static void sort(String[] array){ Arrays.sort(array, new AnagramComparator()); } class AnagramComparator implements Comparator