冒泡法
python版
def bubble_sort(arr): n = len(arr) # 需要进行n-1次选择操作 for i in range(n-1): # 记录最小位置 min_index = i # 从i+1位置到末尾选择出最小数据 for j in range(i+1, n): if arr[j] < arr[min_index]: min_index = j # 如果选择出的数据不在正确位置,进行交换 if min_index != i: arr[i], arr[min_index] = arr[min_index], arr[i] data = [54,226,93,17,77,31,44,55,20] bubble_sort(data) print(data)
# 从后往前 def bubble_sort(nums): for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序进行的次数 for j in range(len(nums) - i - 1): # j为列表下标 if nums[j] > nums[j + 1]: nums[j], nums[j + 1] = nums[j + 1], nums[j] return nums print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97])) # 输出 :[8, 12, 19, 22, 32, 33, 45, 97]
C语言版
#include <stdio.h> int main() { int i,j,a[10]; printf("Please input ten numbers: \n"); for(i=0;i<10;i++) //输入10个数组元素 scanf("%d",&a[i]); for(i=0;i<10-1;i++) //n个数要进行n-1趟比较 { for(j=0;j<9-i;j++) //每趟比较n-i次 if(a[j]>a[j+1]) //依次比较两个相邻的数,将小数放在前面,大数放在后面 { int temp=a[j]; //temp是局部变量 a[j]=a[j+1]; a[j+1]=temp; } } printf("\n"); for(i=0;i<10;i++) //输出比较之后的数组 printf("%d ",a[i]); getchar(); //解决Microsoft Visual Studio运行完闪退,方便用户查看程序运行结果 return 0; }
- 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定