排序也就是使集合中的元素有序化, 它是最常见的计算机操作之一. 理解并掌握排序
法是程序员必备的技能之一. 本节主要介绍几种经典的排序方法: 冒泡排序, 插入排
序, 快速排序和选择排序
4.4.1 冒泡排序
冒泡排序是一种简单的排序算法. 冒泡排序将一个列表中的两个元素进行比较, 并将
最小的元素交换到顶部, 从最底部的元素开始比较, 两个元素中较小的会冒到顶部, 而较大
的会沉到底部, 该过程将被重复执行, 直到所有元素都被排序.
冒泡排序就好像学生做操进场一样, 要在老师的指导下, 以某学生为基准, 按高矮排队
, 泡序法如图 421 所示
image.PNG
如图 421 所示的冒泡排序为例, 每次比较相邻的两个数值, 值小的交换到前面, 每轮
结束后值最大的数交换到了最后. 第一轮需要比较 4 次: 第二轮需要比较 3 次: 第三轮
要比较 2 次: 第四轮只需要比较 1 次
那么如何用二重循环将 5 个数排序呢? 5 个数存放在一维数组中, 外层循环控制比较多少轮,
循环变量为 i: 内层循环控制每轮比较多少次, 循环变量为 j, 如图 422 所示
image.PNG
[例 415] MathDemo jav
下面是通过二重循环来实现的冒泡排序. 实现代码如下
- public static void main(String[] args) {
- int []a={16,25,9,90,23};
- System.out.println("排序之前的数组:");
- printArray(a);
- for (int i=0;i<a.length-1;i++){ //-1 避免数组越界 -i 为了外循环比较增加一次, 内循环就减少一次
- for (int j=0;j<a.length-1-i;j++){
- if(a[j]>a[j+1]){
- int temp=a[j+1];
- a[j+1]=a[j];
- a[j]=temp;
- }
- }
- }
- System.out.println("\n");
- System.out.println("排序之后的数组");
- printArray(a);
- }
- public static void printArray(int[] arry){
- for (int i=0;i<arry.length;i++){
- System.out.println(arry[i]+" ");
- }
- }
输出结果为
image.PNG
第二种方法
- for (int x=arr.length-1;x>0;x--){
- for(int y=0;y<x;y++){
- }
- }
为了更好地理解这个冒泡排序, 这里提供了一个记忆口 (升序) 如下
外层循环 N-1
内层循环 N-1-i
其中, 两个变量的值交换位置, 可以把两个变量比作成一杯红水和一杯蓝水, 要想两
个杯中的水互换, 可以定义一个临时变量, 也就是增加一个空杯子, 先将红水倒入临时的
空杯子, 如语句 temp=a[j], 然后将蓝水倒入刚倒空的装红水的杯子中, 如语句 a[j]=a[j+1]
最后将临时杯子中的红水倒入刚倒空的装蓝水的杯子中, 这样就完成了两个变量中值互换
的目的, 交换后最好是通过程序调试的方法查看各个变量的变化情况
来源: http://www.jianshu.com/p/e699a042b3e8