经典排序算法之一:冒泡排序
1、理解:
关于冒泡我们可以从生活中观察到,水底的一个小的气泡,在上浮的过程中会慢慢的变大(原理:由于越靠近水面,水的压强就越小,对气泡的压力就越小,气泡内部要保持力平衡就通过体积变大来减小内部的压力。)在空气中小气球不容易飞起来,大气球容易飞起来。
冒泡排序:在排序数列中重复访问要排序的数列,并且一次要访问所有元素。
一次比较两个元素,
1、如果两个元素是(“小”,“大”)的顺序,则把“大”这个元素和数列中的下一元素个比较。
2、如果两个元素是(“大”,“小”)的顺序,则把这两个元素调换顺序,变成(“小”,“大”)的顺序,然后在把(“大”)这个元素和数列中的下一个元素比较
比较过程中一直重复这两个步骤。
没我们想的难么难也没我们想的那么简单吧(反正我是挺蒙的),它就是重复换位置的一个过程。
2、伪代码
main(){
定义数组储存排序数列:int [] a =new a[size];
重复走访数列:for(int i=0;i<a.length;i++){
判断是否排序完成:flag=true,
比较数列中两数的大小,按照“小在前大在后”交换位置:
for(int j=0;j<a.length-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=false;
}}}
return a;}
3、代码实现
Java
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author:不秃头(tootou)
* @DATE:2023/4/8 23:34
*/
public class AlgorithmOne {
public static void main(String[] args) {
int[] a = new int[10];
//输入数列放入a数组中
Scanner input = new Scanner(System.in);
System.out.print("输入10个两位数:");
for (int i = 0; i < 10; i++) {
int number = input.nextInt();
a[i] = number;
}
//算法实现
for (int i = 1; i < a.length; i++) {
//设定一个标记,判断是否排序好
boolean flag = true;
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = false;
}
}
if(flag){
break;
}
}
System.out.print(Arrays.toString(a));
}
}
结果:
python
if __name__ == '__main__':
print("输入每个数并用空格隔开:")
L = list(map(int, input().split()))
for i in range(1, len(L)):
for j in range(0, len(L) - i):
if L[j] > L[j + 1]:
temp = L[j]
L[j] = L[j + 1]
L[j + 1] = temp
print(L)
结果:
参考文献:
https://www.runoob.com/w3cnote/bubble-sort.html
https://www.tootou.com/archives/15