几种排序的方法

排序方法是我们绕不开的关卡,只有掌握它理解他才是我们的结果

# -*- coding: utf-8 -*-
#Author :The Y Devil
'''
  :param 冒泡法,快排,选择排序法,插入排序,归并排序,希尔排序...
   只列出大致的种类
'''
#快排
#递归思想,分而治之  复杂度很高
# def quicksort(List):
#     if len(List)<2:
#         return List
#     else:
#         zeroValue=List[0]
#         lowperList=[i for i in List[1:] if i<zeroValue ]
#         upperList=[i for i in List[1:] if i>zeroValue ]
#         newList=quicksort(lowperList)+[zeroValue]+quicksort(upperList)
#         return newList#不返回则报错
# a=[2,3,1,6,1,9,8,0,10]
# c=quicksort(a)
# print(c)

#另一种复杂度为n的快排方式
# def qucik_soft(L,left,right):
#     if left<right:
#         val_base=q_soft(L,left,right)
#         qucik_soft(L,left,val_base-1)
#         qucik_soft(L,val_base+1,right)
#     return L
# def q_soft(L,left,right):
#     key=L[left]#看做基础值
#     while left<right:
#         #对比右边:
#         print(L,key)
#         while left<right and L[right]>=key:
#             right-=1
#         L[left]=L[right]#首次交换值
#         print('right',L)
#         while left<right and L[left]<=key:
#             left+=1
#         L[right]=L[left]#遇到比他大的值,则覆盖在之前尾部指针
#         print('left', L)
#     L[left]=key
#     return left
# print(qucik_soft([2,4,8,3,1,0],0,5))


#选择排序法:find the smallest number  and  return,Complexity:O(n^2)
# def findSmall(arr):#find small number and return  Complexity:O(n)
#     smallest=arr[0]#存储最小值,默认取第一个
#     # smallindex=0#get the small number index
#     for i in range(1,len(arr)):
#         if(smallest>arr[i]):
#             smallest=arr[i]
#     return smallest
# def selectSort(arr):#read  the len for arr,and get the findSmall
#     new_Arr=[]
#     for i in range(len(arr)):
#         small=findSmall(arr)
#         arr.remove(small)
#         new_Arr.append(small)
#     return new_Arr
# print(selectSort([1,3,5,3,2,9,8]))

#另外一种选择,没有上面式子直观
# def chose_sort(arr):
#     for i in range(len(arr)-1):
#         m=i
#         for j in range(i+1,len(arr)):
#             print(j)
#             if arr[m]>arr[j]:
#                 arr[i],arr[j]=arr[j],arr[m]
#     return arr


#-----------冒泡法--------------
# def budd_sort(arr):
#     for i in range(1,len(arr)):
#         for j in range(0,len(arr)-i):
#             if arr[j]>arr[j+1]:
#                 arr[j],arr[j+1]=arr[j+1],arr[j]
#     return arr
# print(budd_sort([3,1,2,6,7,8,10,1]))


#---------------------归并法----------------
'''
 先对列表进行作业拆分,在合并  复杂度nlogn
'''
# def merge_sort(arr):
#     if len(arr)<2:#列表剩余1时,返回
#         return arr
#     mid=len(arr)//2
#     left=merge_sort(arr[:mid])#进行递归调用
#     right=merge_sort(arr[mid:])
#     return merge(left,right)
# def merge(left,right):#合并
#     i,j=0,0#记录下标
#     left_len=len(left)
#     right_len=len(right)
#     new_merge=[]#合成新的列表
#     while i<left_len and j<right_len:
#         if left[i]<=right[j]:
#             new_merge.append(left[i])
#             i+=1#有一个列表比较完就退出
#         else:
#             new_merge.append(right[j])
#             j+=1
#     #减少代码使用,不做判断
#     new_merge.extend(left[i:])
#     new_merge.extend(right[j:])
#     print(left,right,new_merge)#跟踪查看
#     return new_merge
# a=[9,2,1,4,6,7,4,0]
# print(merge_sort(a))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值