数组排序

我们来看一下如何使用冒泡排序算法对一个整型数组从小到大进行排序:

冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。

另外,注意到交换两个变量的值必须借助一个临时变量。像这么写是错误的:

正确的写法是:

  1. int y = 2;
  2. x = y; // x现在是2
  3. y = t; // y现在是t的值1

实际上,Java的标准库已经内置了排序功能,我们只需要调用JDK提供的Arrays.sort()就可以排序:

数组排序 - 图1

在内存中,这个整型数组表示如下:

  1. ┌───┬───┬───┬───┐
  2. └───┴───┴───┴───┘

当我们调用Arrays.sort(ns);后,这个整型数组在内存中变为:

即变量ns指向的数组内容已经被改变了。

如果对一个字符串数组进行排序,例如:

  1. String[] ns = { "banana", "apple", "pear" };

排序前,这个数组在内存中表示如下:

调用Arrays.sort(ns);排序后,这个数组在内存中表示如下:

  1. ┌───┼──────────┐
  2. ┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐
  3. ns ─────>│░░░│░░░│░░░│ "banana" "apple" "pear"
  4. └─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘

原来的3个字符串在内存中均没有任何变化,但是ns数组的每个元素指向变化了。

下载练习:降序排序练习 (推荐使用快速下载)

常用的排序算法有冒泡排序、插入排序和快速排序等;

冒泡排序使用两层for循环实现排序;

交换两个变量的值需要借助一个临时变量。

可以直接使用Java标准库提供的进行排序;

对数组排序会直接修改数组本身。