冒泡法

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: 
");   
    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("
");
  
    for(i=0;i<10;i++)            //输出比较之后的数组  
        printf("%d ",a[i]); 
		
    getchar();                   //解决Microsoft Visual Studio运行完闪退,方便用户查看程序运行结果
    return 0;
} 

  

  • 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定
原文地址:https://www.cnblogs.com/nfgg/p/10597021.html