冒泡排序法核心思想:
比较两个元素,如果前一个比后一个大则进行交换。经过对每个元素的比较,最后将最大的元素设置成最后一个元素。重复操作,最后形成从小到大的排序。
冒泡排序算法的原理如下:
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
算法稳定性:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
代码实现:
/**
* 类名:BubArray<br>
* 功能:TODO(冒泡排序)<br>
* 作者:java战士<br>
* 日期:2018/10/23<br>
* 版本:v1.0.0
* 历史修订:
*/
public class BubArray {
//数组
private long[] arr;
//数组中有效数据大小
private int elems;
//构造函数
public BubArray() {
arr = new long[50];
}
public BubArray(int max){
arr = new long[max];
}
//插入数据
public void insert(long value){
arr[elems] = value;
elems++;
}
//显示数据
public void display(){
for (int i = 0;i<elems;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
// 冒泡排序方法
public void bubbleSort(){
long tmp=0L;
for (int i =0;i<elems-1;i++){
for (int j = 0;j<elems-i-1;j++){
if (arr[j]>arr[j+1]){
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
}
//冒泡排序测试类
public class TestBubArray {
public static void main(String[] args){
BubArray bubArray = new BubArray();
bubArray.insert(25);
bubArray.insert(15);
bubArray.insert(78);
bubArray.insert(35);
bubArray.insert(41);
bubArray.display();
bubArray.bubbleSort();
bubArray.display();
}
}