操作数组的常用方式二-----排序、查找
2012-01-01 02:12
561 查看
/** * 操作数组的常用方式 */ public class ArrayDemo { public static void main(String[] args) { int[] arr = new int[] { 1, 3, 10, 2, 5, 7, 8 }; // 排序前 System.out.println("--------------------排序前--------------------"); printArray(arr); // 选择排序 // selectSort(arr); // 冒泡排序 bubbleSort(arr); System.out.println("--------------------排序后--------------------"); printArray(arr); // 普通查找法 System.out.println(arrayIndexOf(arr, 10)); //二分法查找方式1 System.out.println(searchElIndex(arr, 5)); //二分法查找方式2 System.out.println(searchElIndex2(arr, 5)); } /** * 选择排序(每一轮将第一个元素和数组中的每个元素进行比较) * @param arr 待排序的数组 */ public static void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { /* * 调换元素的位置 方式1:使用临时变量 */ /*int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;*/ /* * 方式2,将相比的两数做加减运算。 * 如:int[] arr = {2,1}; * arr[0] = arr[0] + arr[1]; ==》3=2+1; * arr[1] = arr[0] - arr[1]; ==》2=3-1; * arr[0] = arr[0] - arr[j]; ==》1=3-2; */ /*arr[i] = arr[i] + arr[j]; arr[j] = arr[i] - arr[j]; arr[i] = arr[i] - arr[j];*/ swap(arr, i, j); } } } } /** * 冒泡排序(两个相邻的数进行比较) * @param arr 待排序的数组 */ public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { // 控制比较的次数 for (int j = 0; j < arr.length - i - 1; j++) { // -i:比较的元素减少 -1:为了避免抛ArrayIndexOutOfBoundsException if (arr[j] > arr[j + 1]) { /*int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp;*/ swap(arr, j, j+1); } } } } /** * 将数组中的两个元素交换位置 * @param arr 待交换元素位置的数组 * @param index1 元素下标1 * @param index2 元素下标2 */ public static void swap(int[] arr, int index1, int index2) { int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } /** * 二分法查找一个元素在数组中的下标 * @param arr 数组 * @param key 要查找的元素 * @return 找到返回元素在数组中的下标,没找到则返回-1 */ public static int searchElIndex(int[] arr, int key) { int min,max,mid; min = 0; max = arr.length - 1; mid = (min + max) / 2; while (arr[mid] != key) { if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } if (min > max) return -1; mid = (min + max) / 2; } return mid; } /** * 二分法查找一个元素在数组中的下标 * @param arr 数组 * @param key 要查找的元素 * @return 找到返回元素在数组中的下标,没找到则返回-1 */ public static int searchElIndex2(int[] arr, int key) { int min,max,mid; min = 0; max = arr.length - 1; while (min <= max) { mid = (min + max) >> 1; if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } else { return mid; } } return -1; } /** * 查找一个元素在数组中的位置,该函数可以查找未经排序数组的第一个元素所在数组中的下标 * @param arr 查找的数组 * @param key 查找的元素 * @return 如果找到则返回该元素在数组中的下标,没找到则返回-1 */ public static int arrayIndexOf(int[] arr, int key) { for(int i = 0; i < arr.length; i++) { if (arr[i] == key) return i; } return -1; } /** * 打印数组 * @param arr 待打印的数组 */ public static void printArray(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i < arr.length - 1) { System.out.print(arr[i] + ","); } else { System.out.print(arr[i]); } } System.out.println("]"); } }
相关文章推荐
- 操作数组的常用方式二-----排序、查找
- 操作数组的常用方式二-----排序、查找
- ArrayTool是一个定义了操作数组常用的工具类,比如求最大值,排序,查找
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 一维数组中的一些常用方法(打印数组、逆序、选择排序、冒泡排序、二分法查找、普通查找)
- c语言心得-----数组中对元素的操作排序,查找,插入,和删除
- Java常用类库——Arrays类(用于普通数组操作)、比较器(Comparable、Comparator 用于对象排序)的使用
- PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
- php 数组常用操作 (合并,拆分,追加,查找,删除...)
- 数组的两种种排序方式和查找方式举例
- JAVA day03 数组的应用,查找,求最值与基本排序方式
- NO4.java学习笔记(数组、数组的操作【遍历、排序、查找】)
- java 集合的常用操作(排序、查找、打乱顺序)
- java 集合的常用操作(排序、查找、打乱顺序)
- 黑马程序员_JavaSE基础06 之 数组的操作 求最值 排序 折半查找
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
- Java基本功练习五(一维数组相关操作[声明、创建、乱序、排序、查找]和方法的重载举例[浅议])
- 数组的添加、删除、排序、与字符串之间的转换、截取、查找、遍历操作总结!!!
- 数组的常见的排序及查找操作
- 数组简单操作排序、查找