思想:通过对待排序序列从后向前(从下标较大的元素开始) , 依次比较相邻元素的值, 若发现逆序则交换, 使值较大的元素逐渐从前移向后部, 就象水底下的气泡一样逐渐向上冒。
以下三个代码都是将一个数组进行有小到大排序
java代码
public class Lanqiao1 {
public static void main(String[] args) {
int[] arr = {1,3,5,232,55,33,6,21,515,233,-2};
for(int i = 0;i<arr.length - 1;i++) {
for(int j=0;j<arr.length - 1 -i;j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for(int i =0;i<arr.length;i++) {
System.out.print(arr[i] + " ");
}
}
}
c++
//也可以添加一个标识变量,记录一轮循环下来是否有元素顺序发生变化
//如果没有发生变化,直接退出循环
//实现冒泡算法的剪枝优化
void bubble_sort(int arr[], int size)
{
int i, j;
for(i = 0; i < size - 1; i++)
{
for(j = 0; j < size - 1; j++)
{
if(arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
}
}
}
}
void swap(int a,int b){
int temp = b;
b = a;
a = temp;
}
python
//这个实现就是添加了一个标识变量,控制循环结束
//代码中可以看到,python作为脚本语言,写的更加随便了
def bubble_sort(data):
for i in range(len(data) - 1):
indicator = False
for j in range(len(data) - 1 - i):
if data[j] > data[j + 1]:
data[j], data[j+1] = data[j+1], data[j]
indicator = True
if not indicator:
break