• 冒泡法


    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)
    • 稳定性:稳定
  • 相关阅读:
    uboot的仓库在哪里?
    git如何查看执行过的历史git命令
    for(;;)和while(true)的区别
    CountDownLatch的理解和使用
    countDownLatch
    websocket @ServerEndpoint(value = "/websocket/{ip}")详解
    Java原子性操作之——Atomic包的原理分析
    CAS原理
    java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!
    ThreadPoolExecutor 线程池Demo
  • 原文地址:https://www.cnblogs.com/nfgg/p/10597021.html
Copyright © 2020-2023  润新知