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

    print("冒泡排序")
    def bubbleSort(input_list):
        '''
        函数说明:冒泡排序(升序)
        :param input_lis: 待排序列表
        :return:sorted_list :升序排好的列表
        '''
        if len(input_list) == 0:
            return []
        sorted_list = input_list
        for i in range(len(sorted_list)-1):
            bchanged =False
            # print("第%d趟排序:"%(i-1))
            for j in range(len(sorted_list)-1):
                if sorted_list[j + 1] < sorted_list[j]:
                    sorted_list[j],sorted_list[j+1] = sorted_list[j+1],sorted_list[j]
                    bchanged =True
                # print(sorted_list)
            if not bchanged :
                break
        return sorted_list
    if __name__ == '__main__':
        input_list =[50,2,4,5,99,44,33,66,77,88]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print('直接插入排序')
    def inserSort(input_list):
        '''
        函数说明:直接插入排序
        :param input_list:  待排序的列表
        :return: sorted_list 排序号的列表
        '''
        if len(input_list) == 0 :
            return []
        sorted_list =input_list
        for i in range(1,len(sorted_list)):
            temp = sorted_list[i]
            j = i -1
            while j >=0 and temp < sorted_list[j]:
                sorted_list[j+1] = sorted_list[j]
                j -=1
                sorted_list[j+1] = temp
            return sorted_list
    if __name__ == '__main__':
        input_list = [6,4,8,9,2,3,1]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print("希尔排序")
    
    def shellSort(input_list):
        length =len(input_list)
        if length <=1:
            return input_list
        sorted_list = input_list
        gap = length // 2
        while gap > 0 :
            for i in range(gap,length):
                j = i -gap
                temp = sorted_list[i]
                while j >= 0 and temp < sorted_list[j]:
                    sorted_list[j +gap] = sorted_list[j]
                    j -=gap
                sorted_list[j + gap] = temp
            gap //= 2
        return sorted_list
    if __name__ == '__main__':
        input_list = [50,123,53,154,34,6,7,46,78,67]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    print("-"*50)
    '''快速排序'''
    
    def QuickSort(input_list , left,right):
        '''
        函数说明:快速排序(升序)
        :param input_list:
        :param left:
        :param right:
        :return:
        '''
        def division(input_list,left,right):
            '''
            函数说明:根据left和right进行一次扫描,重新找到基准数
            :param input_list: 待排序列
            :param left: 左指针位置
            :param right: 右指针位置
            :return: left 新的基准位置
            '''
            base =input_list[left]
            while left < right :
                while left < right and input_list[right] >=base:
                    right -=1
                input_list[left] =input_list[right]
                while left < right and input_list[left] <=base :
                    left +=1
                input_list[right] = input_list[left]
            input_list[left] = base
            return left
        if left < right :
            base_index = division(input_list,left,right)
            QuickSort(input_list,left,base_index - 1)
            QuickSort(input_list,base_index + 1,right )
    if __name__ == '__main__':
        input_list = [6,3,4,6,7,8,2,1]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print("简单选择排序")
    def Selectsort(input_list):
        '''
        函数说明:简单选择排序(升序)
        :param input_list: 待排序列表
        :return: sortde_list : 升序排好序的列表
        '''
        if len(input_list) == 0 :
            return []
        sorted_list =input_list
        length = len(sorted_list)
        for i in range(length):
            min_index = 1
            for j in range(i + 1 ,length):
                if sorted_list[min_index] > sorted_list[j]:
                    min_index = j
                temp =sorted_list[i]
                sorted_list[i] = sorted_list[min_index]
                sorted_list[min_index] = temp
            return sorted_list
    if __name__ =="__main__":
        input_list =[4,3,1,6,7,8,9,5,2]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print("堆序列")
    
    def HeadSort(input_list):
        '''
        函数说明:堆排序(升序)
        :param input_list: 待排序列表
        :return: sorted_list:升序排序好的列表
        '''
        def HeadAdjust(input_list,parent,length):
            '''
            函数说明:堆调整,调整为最大堆
            :param input_list: 待排序列表
            :param parent: 堆的父节点
            :param length:  数组长度
            :return: 无
            '''
            temp = input_list[parent]
            child = 2*parent +1
            while child < length :
                if child +1 <length and input_list[child]<input_list[child+1]:
                    child +=1
                if temp >=input_list[child]:
                    break
                input_list[parent] = input_list[child]
                parent =child
                child = 2 *parent +1
            input_list[parent] = temp
        if len(input_list) == 0 :
            return []
        sorted_list =input_list
        length =len(sorted_list)
        for i in range(0,length // 2 +1 )[::-1]:
            HeadAdjust(sorted_list,i ,length)
        for j in range(1,length)[::-1]:
            temp =sorted_list[j]
            sorted_list[j] = sorted_list[0]
            sorted_list[0] = temp
            HeadAdjust(sorted_list,0,j )
            print("第%d趟排序:"%(length-j ),end="")
            print(sorted_list)
        return sorted_list
    if __name__ == '__main__':
        input_list = [3,5,6,7,8,21,2,1]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print("归并排序")
    
    def MergeSort(input_list):
        '''
        函数说明:归并排序(升序)
        :param input_list: 待排序列表
        :return: sorted_list:升序排序好的列表
        '''
        def merge(input_list,left,mid,right,temp):
            '''
            函数说明:合并函数
            :param input_list:待合并列表
            :param left: 左指针
            :param mid:
            :param right:右指针
            :param temp: 临时列表
            :return:
            '''
            i = left
            j = mid +1
            k = 0
            while i <= mid and j <= right :
                if input_list[i] <= input_list[j]:
                    temp[k] = input_list[i]
                    i +=1
                else:
                    temp[k] = input_list[j]
                    j +=1
                k +=1
            while i <= mid:
                temp[k] = input_list[i]
                i +=1
                k +=1
            while j <=right:
                temp[k] = input_list[j]
                j +=1
                k +=1
        def merge_sort(input_list,left,right,temp):
            if left >= right:
                return
            mid = (right + left) //2
            merge_sort(input_list,left,mid,temp)
            merge_sort(input_list,mid+1,right,temp)
            merge(input_list,left,mid,right,temp)
        if len(input_list) == 0 :
            return []
        sorted_list = input_list
        temp = [0]* len(sorted_list)
        merge_sort(sorted_list,0,len(sorted_list)-1,temp)
        return sorted_list
    if __name__ == '__main__':
        input_list = [3,5,6,2,1,0,4,8,9]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
    
    
    print("-"*50)
    print("基数排序")
    
    def RadixSort(input_list):
        '''
        函数说明:基数排序(升序)
        :param input_list:  待排序列表
        :return: sorted_list 升序排序好的列表
        '''
        def MaxBit(input_list):
            '''
            函数说明:求出数组中最大数的位数的函数
            :param input_list: 待排序列表
            :return: bits_num 位数
            '''
            max_data = max(input_list)
            bits_num = 0
            while max_data :
                bits_num +=1
                max_data //= 10
            return bits_num
        def digit(num,d):
            '''
            函数说明:取数xxx数上的第d位数字
            :param num: 带操作的数
            :param d: 第d位的数
            :return: 取数结果
            '''
            p = 1
            while d > 1 :
                d -=1
                p *=10
                return num // p % 10
            if len(input_list) ==0:
                return []
            sorted_list = input_list
            lenght = len(sorted_list)
            bucket = [0]*lenght
            for i in range(1,MaxBit(sorted_list)+1):
                count =[0]*10
                for i in range(0,lenght):
                    count[i] += count[i -1]
                for i in range(0,lenght)[::-1]:
                    k = digit(sorted_list[i],d)
                    bucket[count[k]-1] = sorted_list[i]
                    count[k] -=1
                for i in range(0,lenght):
                    sorted_list[i] =bucket[i]
            return sorted_list
    if __name__ == '__main__':
        input_list =[50,123,543,134,5,76,8,6,9,89,56,45]
        print("排序前",input_list)
        sorted_list = bubbleSort(input_list)
        print("排序后",sorted_list)
  • 相关阅读:
    基础很重要~~04.表表达式-上篇
    【T-SQL基础】03.子查询
    【T-SQL基础】02.联接查询
    【T-SQL基础】01.单表查询-几道sql查询题
    【.Net底层剖析】3.用IL来理解属性
    SQL-基础知识
    IL指令速查
    黑客成长之路-01.新手篇-设置路由器
    《拆掉思维里的墙》~~想跳槽的同学可以先看看这本书!
    【解决方案】安装vssdk_full.exe遇到的问题
  • 原文地址:https://www.cnblogs.com/zhaoyang110/p/9513774.html
Copyright © 2011-2022 走看看