您的位置:首页 > 编程语言 > Java开发

冒泡排序原理(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代码实现:

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]+"   ");
}
}
}


  我们在实际使用时使用它提供的排序方法就行,但是作为一名程序员的话,这些基本的算法,还是必须要掌握的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息