1.基本思想
冒泡排序的基本思想是对比相邻的元素值。相邻元素值比较,如果满足条件两者就交换,把较小的移动到前面,把较大的移动到后面,这样较小的元素就像气泡一样浮上来了。可以看出,冒泡排序的每一次循环都能确定此次循环中最大值的位置。
2.代码实现
这里使用两层for循环实现。需要指出的是,若假设数组长度为 n,只需要进行 n-1次排序便可确定所有元素的位置,即外层循环 n-1次
以下为Java实现冒泡排序:
1 public class BubbleSort { 2 public static void main(String[] args) { 3 int arr[] = {9,30,63,4,12,85,24,1,3,15};//需要排序的数组 4 BubbleSort sorter = new BubbleSort();//创建一个对象(Java中尽量使用对象方法解决问题) 5 sorter.sort(arr); 6 } 7 8 // 定义一个 sort 方法,即冒泡排序 9 public void sort(int arr[]) { 10 for(int i = arr.length - 1;i > 0;i--) {//这里也可以从0~arr.length-1,但下面也许做相应改动 11 for(int j = 0;j < i;j++) { 12 if(arr[j] > arr[j+1]) {//满足条件则相邻元素进行交换 13 int temp = arr[j]; 14 arr[j] = arr[j+1]; 15 arr[j+1] = temp; 16 } 17 } 18 if(i==arr.length-2) {//这里用来输出每一次循环后的数组,以查看排序流程 19 showArray(arr); 20 } 21 } 22 showArray(arr); 23 } 24 25 // 定义一个 showArray方法,用来输出数组 26 public void showArray(int arr[]) { 27 for(int i:arr) { 28 System.out.println(i+"<"); 29 } 30 } 31 }
Python中实现冒泡排序也是利用for循环,要注意的是python里input函数会将输入自动转换为字符串,所以需要强制转换类型。另外输出list时,与字符串提示共同输出时需将list字符串转换后输出
以下是Python实现:
1 # -*- coding: utf-8 -*- 2 3 # 定义冒泡排序方法 4 def BubbleSort(list1): 5 for i in range(len(list1), 0, -1):#为保持和java程序一致,这里使用逆序range循环 6 for j in range(i-1): 7 if list1[j] > list1[j+1]:#满足条件则相邻元素进行交换 8 temp = list1[j] 9 list1[j] = list1[j+1] 10 list1[j+1] = temp 11 return list1 12 13 14 # 自行调用 15 if __name__ == '__main__': 16 n = int(input("请输入列表长度:"))#自己输入数组 17 x = [] 18 for value in range(n): 19 y = int(input("请输入第" + str(value) + "个列表元素:")) 20 x.append(y) 21 print(x) 22 a = BubbleSort(x) 23 print("最终排序结果为: "+str(a))
冒泡排序最关键的就是要掌握 相邻元素比较 这个核心。实现上,语言之间大同小异。