Java学习笔记排序算法-------冒泡排序
来源:互联网 发布:不出门便知天下事言语 编辑:程序博客网 时间:2024/05/28 05:16
今天开始使用Java写几个排序算法,这是第一个排序算法-----冒泡排序,这个应该是最简单容易理解的排序算法了,本科的时候接触到这个是使用C写的,现在简单回顾一下冒泡排序的基本思想:冒泡排序就是从给定数列的首部开始依次比较它和下一个值的大小,如果a[1]>a[i+1]就继续往前走,否则的话需要交换一下a[i]和a[i+1]的值,实现前者比后者的值小的目的,这样经过一轮的排序之后相邻的数据都是前者大于后者的排列,接下来循环进行下去,每一轮的过程中较小的数都会慢慢被交换到数组的尾部,就像是“浮上来”一样,冒泡排序也因此得名。
数组a为原始待排序的数组a=[9,8,7,2,5,6,4,1,56,12,14,36,89,78,45],则每一轮的结果为:
9,8,7,2,5,6,4,1,56,12,14,36,89,78,45,------------->原始数组
89,8,7,2,5,6,4,1,9,12,14,36,56,78,45,
89,78,7,2,5,6,4,1,8,9,12,14,36,56,45,
89,78,56,2,5,6,4,1,7,8,9,12,14,36,45,
89,78,56,45,2,5,4,1,6,7,8,9,12,14,36,
89,78,56,45,36,2,4,1,5,6,7,8,9,12,14,
89,78,56,45,36,14,2,1,4,5,6,7,8,9,12,
89,78,56,45,36,14,12,1,2,4,5,6,7,8,9,
89,78,56,45,36,14,12,9,1,2,4,5,6,7,8,
89,78,56,45,36,14,12,9,8,1,2,4,5,6,7,
89,78,56,45,36,14,12,9,8,7,1,2,4,5,6,
89,78,56,45,36,14,12,9,8,7,6,1,2,4,5,
89,78,56,45,36,14,12,9,8,7,6,5,1,2,4,
89,78,56,45,36,14,12,9,8,7,6,5,4,1,2,
89,78,56,45,36,14,12,9,8,7,6,5,4,2,1,-------------->结果数组
程序如下:
//BubbleSort.java
class BubbleSort{public static void main(String[] args) {//int[] a = {2,1,8,9};int[] a = {2,1};swap(a);print(a);int[] num_list = {9,8,7,2,5,6,4,1,56,12,14,36,89,78,45};System.out.println("排序之前的列表为---------->");print(num_list);bubbleSort(num_list);System.out.println("排序之后的列表为---------->");print(num_list);System.out.println("排序之后正序输出列表为---------->");reverseprint(num_list);}public static void print(int[] numbers) { for(int i = 0 ; i < numbers.length ; i ++ ) { System.out.print(numbers[i] + ","); } System.out.println(""); }public static void reverseprint(int[] numbers){ for(int i=numbers.length-1; i>=0; i--){ System.out.print(numbers[i] + ",");} System.out.print("");}public static void swap(int[] a){if (a == null || a.length != 2){throw new IllegalArgumentException();} int temp; // 记录临时中间值 temp = a[0]; a[0] = a[1]; a[1] = temp;}public static void bubbleSort(int[] numbers) { int size = numbers.length; // 数组大小 for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { if (numbers[i] < numbers[j]) { // 交换两数的位置 //int temp = numbers[i]; //numbers[i] = numbers[j]; //numbers[j] = temp; int a[] = new int[2];a[0]=numbers[i];a[1]=numbers[j];swap(a);numbers[i]=a[0];numbers[j]=a[1]; } } print(numbers); } }}程序很简单,不用多解释都可以看明白,我想多说的是在java中交换两个整数这里,不得不说真是个坑,之前学C后来学python,没有遇上过Java这样别扭的处理两个整数的交换问题,之前是这么写的:
public static void swap(int a,int b){ //值参数传递不能实现交换两个整数
int temp;
temp = a;
a = b;
b = t;
}
后来编译的时候一直报错,就是不能通过,无奈只好开始查资料,毕竟Java对于我完全是一个新东西,后来得知:在java中值参数传递不能实现交换两个整数,算是明白了怎么回事了,接下来就开始想新的处理办法,如上:在实现两个数的交换的时候我用了两种方法,当然被注释掉的三行代码这种方法是比较常见也是比较简单的,Java可以利用数组来实现两个整数的交换,所以在这里就尝试了另一种方法,也就是swap()函数,原理很简单,在swap()函数中设置了抛出异常的条件,当数组为空或者长度不为2时抛出异常,如下是运行提示:
Exception in thread "main" java.lang.IllegalArgumentException
at BubbleSort.swap(BubbleSort.java:35)
at BubbleSort.main(BubbleSort.java:6)
接下来是程序运行结果:
1,2,
排序之前的列表为---------->
9,8,7,2,5,6,4,1,56,12,14,36,89,78,45,
89,8,7,2,5,6,4,1,9,12,14,36,56,78,45,
89,78,7,2,5,6,4,1,8,9,12,14,36,56,45,
89,78,56,2,5,6,4,1,7,8,9,12,14,36,45,
89,78,56,45,2,5,4,1,6,7,8,9,12,14,36,
89,78,56,45,36,2,4,1,5,6,7,8,9,12,14,
89,78,56,45,36,14,2,1,4,5,6,7,8,9,12,
89,78,56,45,36,14,12,1,2,4,5,6,7,8,9,
89,78,56,45,36,14,12,9,1,2,4,5,6,7,8,
89,78,56,45,36,14,12,9,8,1,2,4,5,6,7,
89,78,56,45,36,14,12,9,8,7,1,2,4,5,6,
89,78,56,45,36,14,12,9,8,7,6,1,2,4,5,
89,78,56,45,36,14,12,9,8,7,6,5,1,2,4,
89,78,56,45,36,14,12,9,8,7,6,5,4,1,2,
89,78,56,45,36,14,12,9,8,7,6,5,4,2,1,
排序之后的列表为---------->
89,78,56,45,36,14,12,9,8,7,6,5,4,2,1,
排序之后正序输出列表为---------->
1,2,4,5,6,7,8,9,12,14,36,45,56,78,89,
可以看到:程序实现了对原始数据的排序输出,冒泡排序就说这么多。
- Java学习笔记排序算法-------冒泡排序
- Java学习笔记:冒泡排序算法和选择排序算法
- 算法学习笔记 - 冒泡排序
- 八大排序算法学习笔记:冒泡排序
- [学习笔记]排序算法之冒泡排序
- java排序算法学习(一)--冒泡排序
- 算法学习笔记之冒泡排序算法
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 算法笔记--冒泡排序
- 冒泡排序算法笔记
- 算法学习笔记之冒泡排序
- 简单排序算法学习笔记-冒泡排序算法详解
- 排序算法学习-冒泡排序
- Java排序算法: 冒泡排序
- 排序算法-冒泡排序 java
- java 排序算法--冒泡排序
- Java排序算法--冒泡排序
- Java排序算法-冒泡排序
- Python学习---第3天---Python迭代
- 迷茫
- ThinkingInJava——成员初始化
- mysql导入导出sql文件
- 公牛与状压dp
- Java学习笔记排序算法-------冒泡排序
- 优化Django ORM中的性能问题
- 关于C++合成的默认构造函数
- ReactNative嵌入到安卓原生中遇到的坑
- 安卓开发学习心得-------关于软键盘的那些知识与技巧
- 在RHEL7的vnc中调出Oracle的OUI
- BZOJ 4028: [HEOI2015]公约数数列 分块
- java安全架构____java 秘钥对原理
- 浅谈Activiti Modeler 的扩展