美文网首页
算法----排序问题(python代码)

算法----排序问题(python代码)

作者: 硬派 | 来源:发表于2018-08-21 15:01 被阅读0次

    程序来源于:B站

    课程:【Python】这可能是你见过的最简洁最没有废话的Python教程

    网址:https://www.bilibili.com/video/av5236569/?p=15


    1.插入排序

    #插入排序,取数组中的某一个数,比较当前数与数组中的数值,如果找到了比他小的数,插入,循环至不可再循环

    def insert_sort(origin_list):

            sorted_list=[]

            for i in range(0,len(origin_list)):

                if len(sorted_list)==0:

                    sorted_list.append(origin_list[i])

                    continue

                    for j in range(len(sorted_list)-1,-1,-1):

                        if sorted_list[j]<=origin_list[i]:

                            sorted_list.insert(j+1,origin_list[i])

                            break

                        if j==0:

                            sorted_list.insert(0,origin_list[i])

                origin_list[:]=sorted_list[:]

    origin_list=[5,3,1,7,9,8]

    insert_sort(origin_list)

    print(origin_list)


    2.冒泡排序

    #冒泡排序,将相邻两个数排序,不断迭代得到结果

    def bubble_sort(origin_list):

        for iin range(len(origin_list),0,-1):

            for jin range(0,i-1):

                if origin_list[j]>origin_list[j+1]:

                    origin_list[j],origin_list[j+1]=origin_list[j+1],origin_list[j]

    origin_list=[5,3,1,7,9,8]

    bubble_sort(origin_list)

    print(origin_list)


    3.快速排序

    #快速排序,设定一个中位数,小于该数的数值放在前面,大于该数的数值放在后面,不断迭代,得到结果

    def quick_sort(origin_list,start,end):

        if start>=end:

            return

        left=start

        right=end

        flag_index=left

        while left<right:

            while right>left:

                if origin_list[right]< origin_list[flag_index]:

                    origin_list[right],origin_list[flag_index]=origin_list[flag_index],origin_list[right]

                    flag_index=right

                    break

                right-=1

            while right>left:

                if origin_list[left]>origin_list[flag_index]:

                    origin_list[left],origin_list[flag_index]=origin_list[flag_index],origin_list[left]

                    flag_index=left

                    break

                left+=1

        quick_sort(origin_list,start,flag_index)

        quick_sort(origin_list,flag_index+1,end)

    origin_list=[5,3,1,7,9,8]

    quick_sort(origin_list,0,len(origin_list)-1)

    print(origin_list)


    4.归并排序

    #归并排序,采用的是分治的理念,分而治之,也就是说先把序列均分,组内排序,再与另一组归并,得到结果

    def merge_sort(origin_list,start,end):

        if end<=start:

            return

        mid=int((start+end)/2)

        merge_sort(origin_list,start,mid)

        merge_sort(origin_list,mid+1,end)

        left_head=start

        right_head=mid+1

        temp_list=[]

        while left_head<=midand right_head<=end:

            if origin_list[left_head]< origin_list[right_head]:

                temp_list.append(origin_list[left_head])

                left_head+=1

            if origin_list[left_head]>=origin_list[right_head]:

                temp_list.append(origin_list[right_head])

                right_head+=1

        if left_head<=mid:

            temp_list+=origin_list[left_head:mid+1]

        if right_head<=end:

            temp_list+=origin_list[right_head:end+1]

        for i in range(0,len(temp_list)):

            origin_list[i+start]=temp_list[i]

    origin_list=[5,3,1,7,9,8]

    merge_sort(origin_list,0,len(origin_list)-1)

    print(origin_list)


    相关文章

      网友评论

          本文标题:算法----排序问题(python代码)

          本文链接:https://www.haomeiwen.com/subject/jixjiftx.html