冒泡排序原理(java实现)
2017-08-11 18:19
246 查看
冒泡排序也是排序算法中的一种,他的排序方式是把下标相邻的两个数进行比较,从小到大排序,下标相邻的两个数,如果后面的数小于前面的数,就进行交换,大于则不交换,继续比较下一组数据,直到比完最后一组数据,这个数组中最大的数就冒出来了,举个例子:
假定现在有一个整型数组{23,5,41,166,17},我们要对他进行冒泡排序,首先是下标0和下标1进行比较,下标1中的数据5小于下标0中的数据23,将两者进行交换,数组变为{5,23,41,166,17},之后,下标1和下标2进行比较,下标2中的数据大于下标1中的数据,所以不进行交换,再接着按这种原理,比较下标2和下标3,下标3和下标4中的数据,那么到最后,这个整型数组中最大的数字,就会被放在下标4中,之后再进行第二轮比较,还是下标0和下标1进行比较,下标1和下标2进行比较,下标2和下标3进行比较,比较到这里,这一轮就比较完了,因为下标4中放的这个数组中最大的数字,并且下标3中放的是这个数组中第二大的数字了,接下来还是按照这样的原理,找出数组中第三大的数字,第四大的数字……读者不妨自己试着排一下
我简单说一下原理,为什么比较完之后冒出来的会是最大值,因为当你在比较第一个数和第二个数的时候,如果第二个数小于第一个数,就进行交换,那么就保证了第二个数是前两个数中最大的数,之后第二个数和第三个数进行比较,小于交换,大于不交换,那么就又保证了第三个数是前三个数中最大的数……
可以发现,跟选择排序一样,对五个数进行冒泡排序,需要经过四轮比较,第一轮比较4次,第二轮比较3次,第三轮比较2次……对n个数进行排序,则需要n-1轮比较,第一轮比较n-1次,第二轮比较n-2次……
下面是java代码实现:
需要注意的是,java内部其实也提供了排序的功能,但是需要导入Arrays类,很简单,代码如下
我们在实际使用时使用它提供的排序方法就行,但是作为一名程序员的话,这些基本的算法,还是必须要掌握的
假定现在有一个整型数组{23,5,41,166,17},我们要对他进行冒泡排序,首先是下标0和下标1进行比较,下标1中的数据5小于下标0中的数据23,将两者进行交换,数组变为{5,23,41,166,17},之后,下标1和下标2进行比较,下标2中的数据大于下标1中的数据,所以不进行交换,再接着按这种原理,比较下标2和下标3,下标3和下标4中的数据,那么到最后,这个整型数组中最大的数字,就会被放在下标4中,之后再进行第二轮比较,还是下标0和下标1进行比较,下标1和下标2进行比较,下标2和下标3进行比较,比较到这里,这一轮就比较完了,因为下标4中放的这个数组中最大的数字,并且下标3中放的是这个数组中第二大的数字了,接下来还是按照这样的原理,找出数组中第三大的数字,第四大的数字……读者不妨自己试着排一下
我简单说一下原理,为什么比较完之后冒出来的会是最大值,因为当你在比较第一个数和第二个数的时候,如果第二个数小于第一个数,就进行交换,那么就保证了第二个数是前两个数中最大的数,之后第二个数和第三个数进行比较,小于交换,大于不交换,那么就又保证了第三个数是前三个数中最大的数……
可以发现,跟选择排序一样,对五个数进行冒泡排序,需要经过四轮比较,第一轮比较4次,第二轮比较3次,第三轮比较2次……对n个数进行排序,则需要n-1轮比较,第一轮比较n-1次,第二轮比较n-2次……
下面是java代码实现:
class Demo { public static void main(String[] args) { //定义整型数组 int[] arr = {23,5,41,166,17}; //调用冒泡排序函数 bubble(arr); //输出排序后的数组 for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } } //冒泡排序 //参数:整型数组 //结果:无结果 public static void bubble(int[] arr) { //i来控制轮数,5个数,总共是4轮 for(int i=0;i<arr.length-1;i++) { //每一轮比较的次数正好是arr.length-i-1 //j来控制下标 for(int j=0;j<arr.length-i-1;j++) { //小于交换,大于继续下一轮比较 if(arr[j+1]<arr[j]) { //调用交换函数 exchange(arr,j+1,j); } } } } //交换 public static void exchange(int[] arr,int i,int j) { int c; c = arr[i]; arr[i] = arr[j]; arr[j] = c; } }
需要注意的是,java内部其实也提供了排序的功能,但是需要导入Arrays类,很简单,代码如下
import java.util.Arrays; class Demo { public static void main(String[] args) { int[] arr = {23,5,41,166,17}; //直接使用java中提供的函数 Arrays.sort(arr); for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } } }
我们在实际使用时使用它提供的排序方法就行,但是作为一名程序员的话,这些基本的算法,还是必须要掌握的
相关文章推荐
- 交换排序—冒泡排序(Bubble Sort)算法原理以及Java实现
- 冒泡排序原理和JAVA实现
- 冒泡排序原理及Java实现
- 【Java】数组的冒泡排序和选择排序(原理+代码实现)
- 冒泡排序的原理及java代码实现
- 【排序算法】冒泡排序原理及Java实现
- 冒泡排序(Bubble Sort)原理及Java实现
- 冒泡排序原理分析及Java实现
- 简单排序Java实现(一):冒泡排序,选择排序,插入排序(原理及实现)
- 【排序算法】冒泡排序原理及Java实现
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- Java对象池技术的原理及其实现的小结。
- java中使用线程实现Timer(定时器)原理和源码
- Java对象池技术原理及其实现
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- Java对象池技术的原理及其实现
- 利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询
- Jsp/Java代码分离.实现页面真正的代码分离 设计原理