操作数组的常用方式二-----排序、查找

/**
 * 操作数组的常用方式
 */
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("]");
	}

}
时间: 2024-07-28 22:59:58

操作数组的常用方式二-----排序、查找的相关文章

操作数组的常用方式一----获取数组元素中最大值和最小值

/** * 操作数组的常用方式 */ public class ArrayDemo { public static void main(String[] args) { int[] arr = new int[] { 1, 3, 10, 2, 5, 7, 8 }; // 获取最大值,方式一 System.out.println(getMax(arr)); // 获取最大值,方式二 System.out.println(getMax2(arr)); // 获取最小值,方式一 System.out.

PHP实现二维数组按某列进行排序的方法_php技巧

本文实例讲述了PHP实现二维数组按某列进行排序的方法.分享给大家供大家参考,具体如下: /* * 二维数组 按某列排序 * array_multisort($arr1,$arr2) * 手册 例子如下 * */ $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edi

收藏了php数组的常用操作函数

PHP Array 函数 PHP:指示支持该函数的最早的 PHP 版本. 函数 描述 PHP array() 创建数组. 3 array_change_key_case() 返回其键均为大写或小写的数组. 4 array_chunk() 把一个数组分割为新的数组块. 4 array_combine() 通过合并两个数组来创建一个新数组. 5 array_count_values() 用于统计数组中所有值出现的次数. 4 array_diff() 返回两个数组的差集数组. 4 array_diff

c++程序-我用vector里resize函数创建了一个二维数组,怎么给它排序?代码如下,哪里错了呢?

问题描述 我用vector里resize函数创建了一个二维数组,怎么给它排序?代码如下,哪里错了呢? #include #include #include #include #include using namespace std; int main() { int n, m; cout << "input the row:n and the column:m" << endl; cin >> n >> m; vector< vec

PHP 多维数组的排序问题 根据二维数组中某个项排序_php技巧

PHP内置函数 array_multisort 要求每个数组大小一样 $areas是地区的二维数组,包含人数和次数,现在要按这2种数进行降序排序 复制代码 代码如下: foreach($areaArray as &$areas) { $times = $numbers = array(); foreach($areas as $province => $v) { $times[$province] = $v['times']; $numbers[$province] = $v['number

PHP 二维关联数组根据其中一个字段排序(推荐)

PHP 中二维关联数组如何根据其中一个字段进行排序,下面的代码将二维关联数组 $array 根据 $orderby 字段进行排序: function wpjam_array_multisort($array, $orderby, $order = SORT_ASC, $sort_flags = SORT_NUMERIC){ $refer = array(); foreach ($array as $key => $value) { $refer[$key] = $value[$orderby];

Oracle之3种表连接方式(排序合并连接、嵌套循环、哈希连接)

Oracle之3种表连接方式(排序合并连接.嵌套循环.哈希连接) 排序合并连接 1.2.4.2.1  排序合并连接 排序合并连接(Sort Merge Join)是一种两个表在做表连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的表连接方法. 如果两个表(这里将它们分别命名为表T1和表T2)在做表连接时使用的是排序合并连接,则Oracle会依次顺序执行如下步骤. (1)首先以目标SQL中指定的谓词条件(如果有的话)去访问表T1,然后对访问结果按照表T1中的连接列来排序,排好序

PHP操作数组相关函数

ange($low, $high),range($low, $high, $step);//创建顺序值的数组如:range(1,4)为(1,2,3,4)又如range('a','z') each($array)按顺序返回数组的当前元素,并且将下一个元素设置为当前元素; reset($array)将数组当前元素重新设置到数组开始处 list()可以用来将一个数组分解为一系列的值,如 list($a,$b)=each($array) shuffle($array),array_rand($arg,

web交互设计方法:页面表达常用方式

<页面表达常用方式>是整个"web交互设计方法"中的一部分: 设计师在设计页面时,应该在页面上建立许多视觉层次,引导用户的视觉焦点.把用户的注意力吸引到最重要的元素上,然后才把视线引导到其他重要程度次要的信息上.这样便于用户快捷迅速地找到自己所需,更好的完成阅读.浏览任务.这里介绍几种页面表达的常用方式. 一.页面的浏览顺序 对用户扫描页面的时候进行视线跟踪,这叫做"视觉流".好的设计能够让人们按照顺畅的次序沿着它向前流动.人们一般的习惯是从左到右.从上