zoukankan      html  css  js  c++  java
  • 排序算法

    冒泡排序(Bubble Sort)

    插入排序(Insertion Sort)

    希尔排序(Shell Sort)

    选择排序(Selection Sort)

    快速排序(Quick Sort)

    def QuickSort(arr,start,end):
        if start>=end:
            return 
        i = start
        j = end
        flag = arr[i]
        while i < j:
            #print(start,end,arr,arr[i],arr[j],i,j)
            if arr[i] < flag:
                i+=1
            elif arr[j] > flag:
                j-=1
            else:
                if arr[i] == arr[j]:
                    i+=1 
                else:
                    arr[i],arr[j] = arr[j],arr[i]
                    i+=1
        arr[i] = flag
        QuickSort(arr,start,i-1)  # 这里如果写QuickSort(arr,start,i),当arr[start]==arr[i]]时,由于每次递归调用没有缩小问题规模,整个递归调用会超出最大调用栈深度 
        QuickSort(arr,j+1,end)    # 也不能写QuickSort(arr,j,end)
    
    nums=[3,5,1,8,3,10,3,6,2,12,62,23]
    print(nums)
    QuickSort(nums,0,len(nums)-1)
    print(nums)
    
    

    归并排序(Merge Sort)

    def MergeSort(arr,start,end):
        print(arr[start:end+1])
        if start>=end:
            return
    
        mid = int((start+end)/2)
        MergeSort(arr,start,mid)
        MergeSort(arr,mid+1,end)
        i = start
        j = mid+1
        tmp = []
        ## 以下为合并两个有序数组
        while i<=mid and j<=end:
            if arr[i]<arr[j]:
                tmp.append(arr[i])
                i+=1
            
            else:
                tmp.append(arr[j])
                j+=1
        while i<=mid:
            tmp.append(arr[i])
            i+=1
        while j<=end:
            tmp.append(arr[j])
            j+=1
        print('arr',arr[start:end+1])
        print('tmp',tmp)
        for i in range(len(tmp)):
            arr[start+i] = tmp[i]
       
    
    nums=[3,5,1,8,3,10,3,6,2,12,62,23]
    print(nums)
    MergeSort(nums,0,len(nums)-1)
    print(nums)
    

    堆排序(Heap Sort)

    计数排序(Counting Sort)

    桶排序(Bucket Sort)

    基数排序(Radix Sort)

  • 相关阅读:
    Go学习2-切片
    Go学习1-MOD
    lua学习之逻辑运算符not,and,or
    google protobuf c++ 反射
    我要谴责一下,你们复制别人的答案好歹仔细看看
    远程登录redis
    openssl进行RSA加解密(C++)
    linux通过进程名查看其占用端口
    简体字丶冯|服务网关kong-docker安装
    简体字冯|docker-安装docker私有库
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13121910.html
Copyright © 2011-2022 走看看