概念:
冒泡排序是一种计算机科学领域的较为简单的排序算法,也是最基础的排序算法。它重复走访要排序的数列,一次比较两个元素,如果它们的顺序(升序/降序)与要求不相符就交换它们。走访数列的工作是重复的进行,直到没有再需要交换的元素,也就是说该数列已经排序完成。这个算法的名称由来是因为越大(或越小)的元素会经由一次次交换慢慢“浮动”到数列的顶端,故名“冒泡排序”。
排序过程:
临近的元素两两进行比较,按照从小到大(从大到小)的顺序进行比较交换,这样一趟以后,最大(或最小)的元素被交换到了最后一位。然后除过本趟冒泡后的最后一位元素,其余元素开始下一趟冒泡,直至所有元素均属于冒泡后的最后一位元素即冒泡排序完成。
示例:
package com.cnblogs.lxj.testarraysort;
/**
* @author liuxiaojiang
* @packageName:com.cnblogs.lxj.testarraysort
* @ClassName:BubbleSort
* @Description:测试冒泡排序
* @date 2020/11/27
*/
public class BubbleSort {
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
int[] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
printArray(a);
bubbleSort(a);
printArray(a);
}
/**
* 冒泡排序方法
* @param a
*/
public static void bubbleSort(int[] a){
for(int i = 0;i < a.length;i++){
for(int j = a.length - 1;j > i;j--){
if(a[j - 1] > a[j]){
swapArray(j,j - 1,a);
}
}
}
}
/**
* 交换方法
* @param j
* @param count
* @param a
*/
public static void swapArray(int j,int count,int[] a){
int temp = a[j];
a[j] = a[count];
a[count] = temp;
}
/**
* 输出方法
* @param array
*/
public static void printArray(int[] array){
for(int a : array){
System.out.print(a + " ");
}
System.out.println();
}
}
运行结果:
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 //初始化
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50 //冒泡结束
原理:
算法分析:
冒泡排序就是把大的元素(或小的元素)往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,这个时候两个元素也不会发生位置交换。如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相等的元素相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定的排序算法,但是效率不是很高。