算法基础:排序算法之冒泡排序
实现:数列有序排序
思想:已知一个数列,令数列中相邻的两个元素一一做比较,按照小大的顺序(或从大到小的顺序),如果前一个数比后一个数大(或后一个数比前一个数大),则互换( 位置互换 ),否则就不做操作。以此类推,重复地进行直到没有相邻元素需要交换时,得出一个有序的排序数列。由于在整个排序过程中,每个元素就像是泡泡在水中往一个方向"浮动",故称之为冒泡排序。
工作原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
3.针对所有的元素重复以上的步骤,除了最后一个( 在第一轮的比较中,一个最大的元素会被“浮”到最后 )。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
下面以这么一个数列{50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7, 50.36},实现对它的顺序排序。
50.36 | 464654.0 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 |
Java版实现:
package simple.callback.math.sort;
/**
* @program: psimple
* @description:冒泡排序(Bubble Sort)
* @author: Mr.Wang
* @create: 2021年 01月 12日 星期二 23:29:02 CST
**/
public class NumBubbleSort {
public static void main(String[] args) {
long start, time, end = 0;
double nums[] = {50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7, 50.36};
double sorts[];
System.out.println(nums.length + "个浮点数示例测试结果:");
start = System.currentTimeMillis();
sorts = NumBubbleSort.bubbleSort(nums);
end = System.currentTimeMillis();
time = end - start;
System.out.println("冒泡排序[start:" + start + "-end:" + end + "],用时" + time + "ms");
System.out.print("推演排序后:");
for (int i = 0; i < sorts.length; i++)
System.out.print(sorts[i] + "\t");
}
// 冒泡排序(Bubble Sort)
public static double[] bubbleSort(double[] nums) {
double[] numbers = nums;
//原数列
System.out.print("\n冒泡排序原数列:");
for (int z = 0; z < numbers.length; z++)
System.out.print(numbers[z] + "\t");
System.out.println();
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers.length - 1 - i; j++) {
if (numbers[j] > numbers[j + 1]) {
double temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
//输出推演过程
System.out.print("冒泡排序推演过程[" + i + "]");
for (int z = 0; z < numbers.length; z++)
System.out.print(numbers[z] + "\t");
System.out.println();
}
}
}
return numbers;
}
}
程序输出结果:
10个浮点数示例测试结果:
冒泡排序原数列:50.36 464654.0 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 464654.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 464654.0 96.5 5451.3 554.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 464654.0 5451.3 554.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 5451.3 464654.0 554.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 5451.3 554.0 464654.0 82.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 5451.3 554.0 82.0 464654.0 67.7 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 464654.0 50.36
冒泡排序推演过程[0]50.36 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36 464654.0
冒泡排序推演过程[1]50.36 52.0 96.5 556.12 5451.3 554.0 82.0 67.7 50.36 464654.0
冒泡排序推演过程[1]50.36 52.0 96.5 556.12 554.0 5451.3 82.0 67.7 50.36 464654.0
冒泡排序推演过程[1]50.36 52.0 96.5 556.12 554.0 82.0 5451.3 67.7 50.36 464654.0
冒泡排序推演过程[1]50.36 52.0 96.5 556.12 554.0 82.0 67.7 5451.3 50.36 464654.0
冒泡排序推演过程[1]50.36 52.0 96.5 556.12 554.0 82.0 67.7 50.36 5451.3 464654.0
冒泡排序推演过程[2]50.36 52.0 96.5 554.0 556.12 82.0 67.7 50.36 5451.3 464654.0
冒泡排序推演过程[2]50.36 52.0 96.5 554.0 82.0 556.12 67.7 50.36 5451.3 464654.0
冒泡排序推演过程[2]50.36 52.0 96.5 554.0 82.0 67.7 556.12 50.36 5451.3 464654.0
冒泡排序推演过程[2]50.36 52.0 96.5 554.0 82.0 67.7 50.36 556.12 5451.3 464654.0
冒泡排序推演过程[3]50.36 52.0 96.5 82.0 554.0 67.7 50.36 556.12 5451.3 464654.0
冒泡排序推演过程[3]50.36 52.0 96.5 82.0 67.7 554.0 50.36 556.12 5451.3 464654.0
冒泡排序推演过程[3]50.36 52.0 96.5 82.0 67.7 50.36 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[4]50.36 52.0 82.0 96.5 67.7 50.36 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[4]50.36 52.0 82.0 67.7 96.5 50.36 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[4]50.36 52.0 82.0 67.7 50.36 96.5 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[5]50.36 52.0 67.7 82.0 50.36 96.5 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[5]50.36 52.0 67.7 50.36 82.0 96.5 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[6]50.36 52.0 50.36 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
冒泡排序推演过程[7]50.36 50.36 52.0 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
冒泡排序[start:1610466309202-end:1610466309213],用时11ms
推演排序后:50.36 50.36 52.0 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
原数列 | 50.36 | 464654.0 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 |
次序 | ↓↓↓冒泡排序程序执行推演过程 | |||||||||
1 | 50.36 | 52.0 | 464654.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 |
2 | 50.36 | 52.0 | 556.12 | 464654.0 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 |
3 | 50.36 | 52.0 | 556.12 | 96.5 | 464654.0 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 |
4 | 50.36 | 52.0 | 556.12 | 96.5 | 5451.3 | 464654.0 | 554.0 | 82.0 | 67.7 | 50.36 |
5 | 50.36 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 464654.0 | 82.0 | 67.7 | 50.36 |
6 | 50.36 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 464654.0 | 67.7 | 50.36 |
7 | 50.36 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 464654.0 | 50.36 |
8 | 50.36 | 52.0 | 556.12 | 96.5 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 | 464654.0 |
9 | 50.36 | 52.0 | 96.5 | 556.12 | 5451.3 | 554.0 | 82.0 | 67.7 | 50.36 | 464654.0 |
10 | 50.36 | 52.0 | 96.5 | 556.12 | 554.0 | 5451.3 | 82.0 | 67.7 | 50.36 | 464654.0 |
11 | 50.36 | 52.0 | 96.5 | 556.12 | 554.0 | 82.0 | 5451.3 | 67.7 | 50.36 | 464654.0 |
12 | 50.36 | 52.0 | 96.5 | 556.12 | 554.0 | 82.0 | 67.7 | 5451.3 | 50.36 | 464654.0 |
13 | 50.36 | 52.0 | 96.5 | 556.12 | 554.0 | 82.0 | 67.7 | 50.36 | 5451.3 | 464654.0 |
14 | 50.36 | 52.0 | 96.5 | 554.0 | 556.12 | 82.0 | 67.7 | 50.36 | 5451.3 | 464654.0 |
15 | 50.36 | 52.0 | 96.5 | 554.0 | 82.0 | 556.12 | 67.7 | 50.36 | 5451.3 | 464654.0 |
16 | 50.36 | 52.0 | 96.5 | 554.0 | 82.0 | 67.7 | 556.12 | 50.36 | 5451.3 | 464654.0 |
17 | 50.36 | 52.0 | 96.5 | 554.0 | 82.0 | 67.7 | 50.36 | 556.12 | 5451.3 | 464654.0 |
18 | 50.36 | 52.0 | 96.5 | 82.0 | 554.0 | 67.7 | 50.36 | 556.12 | 5451.3 | 464654.0 |
19 | 50.36 | 52.0 | 96.5 | 82.0 | 67.7 | 554.0 | 50.36 | 556.12 | 5451.3 | 464654.0 |
20 | 50.36 | 52.0 | 96.5 | 82.0 | 67.7 | 50.36 | 554.0 | 556.12 | 5451.3 | 464654.0 |
21 | 50.36 | 52.0 | 82.0 | 96.5 | 67.7 | 50.36 | 554.0 | 556.12 | 5451.3 | 464654.0 |
22 | 50.36 | 52.0 | 82.0 | 67.7 | 96.5 | 50.36 | 554.0 | 556.12 | 5451.3 | 464654.0 |
23 | 50.36 | 52.0 | 82.0 | 67.7 | 50.36 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
24 | 50.36 | 52.0 | 67.7 | 82.0 | 50.36 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
25 | 50.36 | 52.0 | 67.7 | 50.36 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
26 | 50.36 | 52.0 | 50.36 | 67.7 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
27 | 50.36 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |
结果: | 50.36 | 50.36 | 52.0 | 67.7 | 82.0 | 96.5 | 554.0 | 556.12 | 5451.3 | 464654.0 |