• 蓝桥杯(1):python排序


    1 基础

    1.1 输出

    1.1.1 去掉输出的空格

    1. print("Hello","World",123,sep="+")
    2. print("hello",'world',123,sep='')
    3. print('hello','world',123)
    4. #输出结果
    5. #Hello+World+123
    6. #helloworld123
    7. #hello world 123

     1.1.2 以不同的方式结尾

    1. print("Hello","World",123,sep="+",end='apple')
    2. print("hello",'world',123,sep='')
    3. print('hello','world',123)

    1.2 输入

    input 是字符串类型

    1.3 常量变量运算符

    int转bool:非0是TRUE,0是FALSE【0和FLASE一一对】

    运算符://整除 %取余

    关系运算符的结果:TRUE或FALSE!

    2 冒泡排序

    2.1 算法步骤

    运行n-1次,每一次把最大的换到最后

    时间复杂度:O(n^2) 空间复杂度:O(1)【没有用到新的空间,是在原来的空间上进行的】,稳定

    2.2 代码实现

    1. n = int(input())
    2. a = list(map(int,input().split()))
    3. #循环n-1次,每次获得第i大
    4. for i in range(1,n):
    5. #每次比较a[j]和a[j+1]的大小,如果前面大就交换
    6. for j in range(0,n-i):
    7. if a[j]>a[j+1]:
    8. a[j],a[j+1]=a[j+1],a[j]
    9. #注意输出的格式要求:这里要求用空格隔开
    10. print(' '.join(map(str,a)))

    3 选择排序

    3.1 算法步骤

    选择一个最小的放在最左边,核心:选择并储存最小值

    时间复杂度:O(n^2),空间复杂度o(1),稳定

    3.2 具体代码

    1. n = int(input())
    2. a = list(map(int,input().split()))
    3. for i in range(0,n-1):
    4. min_value = a[i]
    5. min_idx = i
    6. for j in range(0+i,n):
    7. if a[j] < min_value:
    8. min_value = a[j]
    9. min_idx = j
    10. #进行交换
    11. a[min_idx] = a[i]
    12. a[i]= min_value
    13. #或者写成 都可以哦!
    14. #a[min_idx],a[i] = a[i],a[min_idx]
    15. #print(a)
    16. print(' '.join(map(str,a)))

    4 插入排序

    4.1 算法步骤

    相当于扑克牌排序

    要做的是在一个有序的数组插入一个数字!

     

    4.2 具体代码

    1. n = int(input())
    2. a = list(map(int,input().split()))
    3. for i in range(1,n):
    4. value = a[i]
    5. insert_idx = 0 #注意这个的设置比较重要,如果比到最后是最小的,则插入的位置是0
    6. for j in range(i-1,-1,-1):
    7. if a[j] > value:
    8. a[j+1] = a[j] #向后挪
    9. else:
    10. insert_idx = j+1 #挪不动,说明这个值比a[j]大,则他应该在a[j+1]的位置上!
    11. break
    12. a[insert_idx] = value
    13. print(' '.join(map(str,a)))

    5 快速排序

    5.1 算法步骤

    这时3的位置是一定正确的!

    核心:怎么选基准,怎么分,怎么递归

    5.2 具体代码

    1. #列表a,左端点为left,后端点为right
    2. def partition(a,left,right):
    3. stand = a[left]
    4. idx = left+1
    5. for i in range(left+1,right+1):
    6. if a[i]
    7. a[i],a[idx] = a[idx],a[i]
    8. idx = idx+1
    9. a[idx-1],a[left] = a[left],a[idx-1]
    10. #print(a)
    11. return idx-1
    12. def quicksort(a,left,right):
    13. if left
    14. mix = partition(a,left,right)
    15. quicksort(a,left,mix-1)
    16. quicksort(a,mix+1,right)
    17. return a
    18. a = [5,3,8,1,2,9,4,7,6]
    19. left = 0
    20. right = 8
    21. print(quicksort(a,left,right))

     注意递归的规则是:一定要有结束条件!!!!!这就解释left

    6 归并排序

    6.1 算法步骤

    6.2 具体代码

    合并两个有序的列表,实际还是递归!!!

    1. # 归并排序
    2. # 第一步是变编写代码:合并两个有序的列表!!!!
    3. def Merge(A,B):
    4. c = []
    5. while len(A) !=0 and len(B)!= 0:
    6. if A[0] <= B[0]:
    7. c.append(A[0])
    8. A.pop(0)
    9. else:
    10. c.append(B[0])
    11. B.pop(0)
    12. c.extend(A)
    13. c.extend(B)
    14. return c
    15. def Mergesort(a):
    16. if len(a) < 2:
    17. return a
    18. else:
    19. mix = len(a) //2
    20. left = Mergesort(a[0:mix])
    21. right = Mergesort(a[mix:len(a)])
    22. a = Merge(left,right)
    23. return a
    24. n = int(input())
    25. a = list(map(int,input().split()))
    26. print(Mergesort(a))

    7 桶排序

    7.1 算法步骤

    为了缩小问题规模!!!

    7.2 具体代码

    代码的最核心:分桶!!!

    找到最大值和最小值,除以总的桶数

    1. def Bucket_sort(a,bucketcount):
    2. minvalue, maxvalue = min(a),max(a)
    3. bucketsize = (maxvalue-minvalue+1) // bucketcount #均匀的分开
    4. res = [[] for i in range(bucketcount+1)]#要多一个桶 放不能整除的那些数字
    5. #把所有的元素放在对应的桶里
    6. for i in a:
    7. idx = (i-minvalue) // bucketsize
    8. res[idx].append(i)
    9. ans = []
    10. for i in res:
    11. i.sort()
    12. ans = ans + i
    13. return ans
    14. n = int(input())
    15. a = list(map(int, input().split()))
    16. print(Bucket_sort(a,5))

  • 相关阅读:
    做软件测试三年,薪资不到20K,今天,我提出了辞职…
    学会Spring Cloud微服务架构绝活,渣本也能进大厂
    5G智能网关如何解决城市停车痛点难点
    ZYNQ实验--裸机程序固化
    【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
    OOALV总结
    什么是文档签名证书?PDF文档怎么签名?
    数据库定义语言:DDL(data definition language)
    元数据管理Apache Atlas编译集成部署及测试
    java微服务 Dubbo面试题/SpringCloud面试题
  • 原文地址:https://blog.csdn.net/qq_64279967/article/details/136679350