数组相关知识(包括各种常见的排序原理及其实现,冒泡排序、交换排序、快速排序)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 数组相关知识(包括各种常见的排序原理及其实现,冒泡排序、交换排序、快速排序)

数组相关知识(包括各种常见的排序原理及其实现,冒泡排序、交换排序、快速排序)

 2013/8/27 19:06:57  fangguanhong  程序员俱乐部  我要评论(0)
  • 摘要:jdk为我们提供了一个辅助功能的类java,util.Arrays,这个类专门用于帮助我们完成一些数组的相关的一些方法的判断,比如数组的比较(比较各种数据类型的两个数组里面存放的内容是否相等)、排序、查询...之类的,这个类里面提供的所有方法全都是static的。例如:比较两个数组的内容是否相同:int[]c=newint[]{1,2,3};int[]d=newint[]{1,2,3};System.out.println(Arrays.equals(c,d));System类是java
  • 标签:实现 数组 快速排序 冒泡排序
jdk为我们提供了一个辅助功能的类java,util.Arrays,这个类专门用于帮助我们完成一些数组的相关的一些方法的判断,比如数组的比较(比较各种数据类型的两个数组里面存放的内容是否相等)、排序、查询...之类的,这个类里面提供的所有方法全都是static的。
例如:比较两个数组的内容是否相同:
class="java">		int[] c = new int[]{1,2,3};
		int[] d = new int[]{1,2,3};
		System.out.println(Arrays.equals(c,d));



System类是java.util包里面的一个类,其中有这样一个方法:
public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

这个方法可以复制数组,将一个数组里面的内容复制到另一个数组里面。


【说明】:System.out.println(a instanceof Object);为真,说明数组a也是一个对象。

System.out.println(a instanceof int[][][]);为真,说明数组a是一个三维数组,类型是int[][][]。
System.out.println(a[0] instanceof int[][]);为真,说明数组a[0]是一个二维数组,类型是int[][]。
System.out.println(a[0][0] instanceof int[]);为真,说明数组a[0][0]是一个一维数组,类型是int[]。




下面一个小的知识点:数组是一个对象,
		int[][] arr = new int[2][3];
		if (arr instanceof int[][]) {
			System.out.print(123);
		}
		if (arr[0] instanceof int[]) {
			System.out.print(456);
		}

打印结果为123456,两个判断都为真。

时常熟悉下下面这些代码:
		int[][] a = new int[][] { { 1, 2, 3 }, { 4 }, { 5, 6, 7, 8 } };

		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				System.out.print(a[i][j] + " ");
			}
			System.out.println();
		}

		char[] ch = { 'A', 'C' };
		swap(ch, ch[1]);
		for (int i = 0; i < ch.length; i++) {
			System.out.println(ch[i]);
		}

		System.out
				.println(compare(new int[] { 1, 2, 3 }, new int[] { 1, 2, 3 }));

		System.out.println("------------------------------------");
		int[] c = new int[] { 1, 2, 3 };
		int[] d = new int[] { 1, 2, 3 };
		System.out.println(Arrays.equals(c, d));

		System.out.println("-------------------------------------");
		int[] aa = new int[] { 1, 2, 3, 4 };
		int[] bb = new int[4];
		System.arraycopy(aa, 0, bb, 0, 4);
		for (int i = 0; i < bb.length; i++) {
			System.out.println(bb[i]);
		}



下面讲解冒泡排序
原理:比如想要升序排列,对数组里面的数字相邻的两两进行比较,如果前面的数大,他们两个就交换位置,否则不变,继续执行,循环完第一轮之后最大的数就到最后一个了,接下来开始第二轮,第二轮之后第二大的数据也到了倒数第二个位置了,第三轮之后第三大的数据也到了倒数第三大位置了.....,下面举一个例子
对5,4,7,9,3这一组数据按照从大到小进行排序:
第一轮:45793;
       45793;
       45793;
       45739;
第二轮:......
       45379;
第三轮:......
       43579;
第四轮:......
       34579;


代码如下:
	/**
	 * 冒泡排序(对一个数组里的数据进行升序排列)
	 * 方法: sort <br>
	 * 描述: TODO <br>
	 * 作者: 
	 * 时间: 
	 * @param a
	 * @return
	 */
	public static int[] sort(int[] a) {
		// 数组里面有length个数就循环(length-1)轮,每轮完成之后从后向前依次得到一个最大数,循环到最后一个数就不用循环了,因为只剩一个数了,它肯定是排在第一位的最小的数,所以循环(length-1)轮
		for (int i = 0; i < (a.length - 1); i++) {
			// 这里循环(a.length - 1 - i)次,进行相邻的两数之间的比较,并且对不符合升序的组合互换位置,而前面已经从后向前依次得到了(i+1)个最大数,所以后面已经确定的数就不用再进行两两比较了。
			for (int j = 0; j < (a.length - 1 - i); j++) {
				if (a[j] > a[j + 1]) {
					int demp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = demp;
				} else {
					continue;
				}
			}
		}
		return a;
	}
发表评论
用户名: 匿名