排序算法(python实现)

排序算法一共有2类:

   算法时间fuzh复杂读与nlogn比较,大为非线性类,小为线性类;

        非线性类比较类排序有:交换排序(冒泡,快速),插入排序(简单插入,shell),归并排序(2路归并,多路归并),选择排序(简单选择,堆排序);

        线性时间非比较类排序有:基数排序,计数排序,还有桶排序。

 

下面代码实现了8种算法,用户进入后直接按命令选择就好,代码如下:

 


import copy

#插入排序
def insert_sort(ilist):
    for i in range(len(ilist)):
        for j in range(i):
            if ilist[i] < ilist[j]:
                ilist.insert(j, ilist.pop(i))
                break
    return ilist

#shell排序
def shell_sort(slist):
    gap = len(slist)
    while gap > 1:
        gap = gap // 2
        for i in range(gap, len(slist)):
            for j in range(i % gap, i, gap):
                if slist[i] < slist[j]:
                    slist[i], slist[j] = slist[j], slist[i]
    return slist

#冒泡排序
def bubble_sort(blist):
    count = len(blist)
    for i in range(0, count):
        for j in range(i + 1, count):
            if blist[i] > blist[j]:
                blist[i], blist[j] = blist[j], blist[i]
    return blist

#快速排序
def quick_sort(qlist):
    if qlist == []:
        return []
    else:
        qfirst = qlist[0]
        qless = quick_sort([l for l in qlist[1:] if l < qfirst])
        qmore = quick_sort([m for m in qlist[1:] if m >= qfirst])
        return qless + [qfirst] + qmore
    
#选择排序
def select_sort(slist):
    for i in range(len(slist)):
        x = i
        for j in range(i, len(slist)):
            if slist[j] < slist[x]:
                x = j
        slist[i], slist[x] = slist[x], slist[i]
    return slist


 #堆排序
def heap_sort(hlist):
    def heap_adjust(parent):
        child = 2 * parent + 1  # left child
        while child < len(heap):
            if child + 1 < len(heap):
                if heap[child + 1] > heap[child]:
                    child += 1  # right child
            if heap[parent] >= heap[child]:
                break
            heap[parent], heap[child] = heap[child], heap[parent]
            parent, child = child, 2 * child + 1
 
    heap, hlist = copy.copy(hlist), []
    for i in range(len(heap) // 2, -1, -1):
        heap_adjust(i)
    while len(heap) != 0:
        heap[0], heap[-1] = heap[-1], heap[0]
        hlist.insert(0, heap.pop())
        heap_adjust(0)
    return hlist

#基数排序
def radix_sort(array):
    bucket, digit = [[]], 0
    while len(bucket[0]) != len(array):
        bucket = [[], [], [], [], [], [], [], [], [], []]
        for i in range(len(array)):
            num = (array[i] // 10 ** digit) % 10
            bucket[num].append(array[i])
        array.clear()
        for i in range(len(bucket)):
            array += bucket[i]
        digit += 1
    return array


#归并排序
def merge_sort(array):
    def merge_arr(arr_l, arr_r):
        array = []
        while len(arr_l) and len(arr_r):
            if arr_l[0] <= arr_r[0]:
                array.append(arr_l.pop(0))
            elif arr_l[0] > arr_r[0]:
                array.append(arr_r.pop(0))
        if len(arr_l) != 0:
            array += arr_l
        elif len(arr_r) != 0:
            array += arr_r
        return array
 
    def recursive(array):
        if len(array) == 1:
            return array
        mid = len(array) // 2
        arr_l = recursive(array[:mid])
        arr_r = recursive(array[mid:])
        return merge_arr(arr_l, arr_r)
 
    return recursive(array)

def main():
    
     print("!!!!!!!!!!!!!!!!欢迎进入杨远林的排序世界!!!!!!!!!!!!!!!!")
     print("1(冒泡排序)!")
     print("2(快速排序)!")
     print ("3(插入排序)!")
     print("4(shell排序)!")
     print("5(简单选择排序)!")
     print("6(堆排序)!")
     print("7(2路归并排序)!")
     print("8(多路归并排序)!")
     a=[4,5,6,7,3,2,6,9,8]
     print("原来数组为!",a)
     a=int(input("请输入数据选择:"))
     i=1
     while(i==1):
         
         
         if(a==1):
             
             blist = bubble_sort([4,5,6,7,3,2,6,9,8])
             print(blist)
             break
         
         elif(a==2):
             qlist = quick_sort(a)
             print(qlist)
             break
         elif(a==3):
             
             ilist = insert_sort([4,5,6,7,3,2,6,9,8])
             print(ilist)
             break
         elif(a==4):
             slist = shell_sort([4,5,6,7,3,2,6,9,8])
             print(slist)
             break
         elif(a==5):
             slist = select_sort([4,5,6,7,3,2,6,9,8])
             print(slist)
             break
         elif(a==6):
             hlist = heap_sort([4,5,6,7,3,2,6,9,8])
             print(hlist)
             break
         elif(a==7):
             rlist=radix_sort([4,5,6,7,3,2,6,9,8])
             print(rlist)
             break
         elif(a==8):
              glist = merge_sort([4,5,6,7,3,2,6,9,8])
              print(glist)
              break
         elif(a==0):
              
             break
         else :
             print("输入不合法。重新输入!")
             a=int(input("请输入数据选择:"))
             continue
        
                
main()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值