几个排序算法python实现

随机生成数组

  def generate_arr(n):
    	        arr = []
    	        for i in range(n):
    	            arr.append(random.randint(1, n))
    	        return arr

选择排序

def select_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i+1,len(arr)):
            if arr[min_idx] > arr[j]:
                arr[min_idx],arr[j] = arr[j],arr[min_idx]
    return arr

直接插入排序

def insert_sort(arr):
    for i in range(len(arr)):
        for j in range(i,0,-1):
            if arr[j-1] > arr[j]:
                arr[j],arr[j-1] = arr[j-1],arr[j]
    return arr

直接插入排序优化

def insert_sort2(array):
    for i in range(len(array)):
        if array[i-1] > array[i]:
            index,temp = i,array[i]
            while index > 0 and array[index-1] > temp:
                array[index] = array[index-1]
                index -= 1
            array[index] = temp
    return array

冒泡排序优化

   def bubble_sort(arr):
        for i in range(len(arr)):
            is_sorted = True
            for j in range(len(arr)-i-1):
                if arr[j] > arr[j+1]:
                    arr[j],arr[j+1] = arr[j+1],arr[j]
                    is_sorted = False
            if is_sorted:
                break
        return arr

希尔排序

  def shell_sort(arr):
        n = len(arr)
        gap = int(n/2)
        while gap>0:
            for i in range(gap,n):
                j,temp = i,arr[i]
                while j>=gap and arr[j-gap] > temp:
                    arr[j] = arr[j-gap]
                    j -= gap
                arr[j] = temp
            gap = int(gap/2)
        return arr

归并排序

 def merge_sort(arr):
        if len(arr) == 1:
            return arr
        mid = len(arr)//2
        left = arr[:mid]
        right = arr[mid:]
        ll = merge_sort(left)
        rr = merge_sort(right)
        return merge(ll,rr)

归并辅助

   def merge(left,right):
        sorted_arr = []
        while len(left)>0 and len(right)>0:
            if left[0] <= right[0]:
                sorted_arr.append(left.pop(0))
            else:
                sorted_arr.append(right.pop(0))
        sorted_arr += left
        sorted_arr += right
        return sorted_arr

附上几个算法的性能测试
用随机生成数组的方法,数据量为10000,结果如下图所示
各个算法的性能测试结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值