zoukankan      html  css  js  c++  java
  • 冒泡选择插入希尔归并快速排序等python实现

    def bubble_sort(a_list):
        for pass_num in range(len(a_list) - 1, 0, -1):
            for i in range(pass_num):
                if a_list[i] > a_list[i + 1]:
                    a_list[i], a_list[i + 1] = a_list[i + 1], a_list[i]
    
    
    def short_bubble_sort(a_list):
        exchanges = True
        pass_num = len(a_list) - 1
        while pass_num > 0 and exchanges:
            exchanges = False
            for i in range(pass_num):
                if a_list[i] > a_list[i + 1]:
                    exchanges = True
                    a_list[i], a_list[i + 1] = a_list[i + 1], a_list[i]
            pass_num -= 1
    
    
    def selection_sort(a_list):
        for fill_sort in range(len(a_list) - 1, 0, -1):
            pos_of_max = 0
            for location in range(1, fill_sort + 1):
                if a_list[location] > a_list[pos_of_max]:
                    pos_of_max = location
                if fill_sort != pos_of_max:
                    a_list[fill_sort], a_list[pos_of_max] = a_list[pos_of_max], a_list[fill_sort]
    
    
    def insertion_sort(a_list):
        for index in range(1, len(a_list)):
            current_value = a_list[index]
            position = index
    
            while position > 0 and a_list[position - 1] > current_value:
                a_list[position] = a_list[position - 1]
                position -= 1
            a_list[position] = current_value
    
    
    def shell_sort(a_list):
        sublist_count = len(a_list) // 2
        while sublist_count > 0:
            for start_position in range(sublist_count):
                gap_insertion_sort(a_list, start_position, sublist_count)
            print("After increments of size", sublist_count, "The list is", a_list)
            sublist_count = sublist_count // 2
    
    
    def gap_insertion_sort(a_list, start, gap):
        for i in range(start + gap, len(a_list), gap):
            current_value = a_list[i]
            position = i
            while position >= gap and a_list[position - gap] > current_value:
                a_list[position] = a_list[position - gap]
                position = position - gap
    
            a_list[position] = current_value
    
    
    def merge_sort(a_list):
        print("Splitting ", a_list)
        if len(a_list) > 1:
            mid = len(a_list) // 2
            left_half = a_list[:mid]
            right_half = a_list[mid:]
    
            merge_sort(left_half)
            merge_sort(right_half)
    
            i = 0
            j = 0
            k = 0
    
            while i < len(left_half) and j < len(right_half):
                if left_half[i] < right_half[j]:
                    a_list[k] = left_half[i]
                    i += 1
                else:
                    a_list[k] = right_half[j]
                    j += 1
                k += 1
    
            while i < len(left_half):
                a_list[k] = left_half[i]
                k += 1
                i += 1
    
            while j < len(right_half):
                a_list[k] = right_half[j]
                k += 1
                j += 1
            print("Merging ", a_list)
    
    
    def quick_sort(a_list):
        quick_sort_helper(a_list, 0, len(a_list) - 1)
    
    
    def quick_sort_helper(a_list, first, last):
        if first < last:
            split_point = partition(a_list, first, last)
    
            quick_sort_helper(a_list, first, split_point)
            quick_sort_helper(a_list, split_point + 1, last)
    
    
    def partition(a_list, first, last):
        pivot_value = a_list[first]
    
        left_mark = first + 1
        right_mark = last
    
        done = False
        while not done:
            while left_mark <= right_mark and a_list[left_mark] <= pivot_value:
                left_mark += 1
    
            while right_mark >= left_mark and a_list[right_mark] >= pivot_value:
                right_mark -= 1
    
            if right_mark < left_mark:
                done = True
            else:
                a_list[left_mark], a_list[right_mark] = a_list[right_mark], a_list[left_mark]
    
        a_list[first], a_list[right_mark] = a_list[right_mark], a_list[first]
    
        return right_mark
    
    
    a_list = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    quick_sort(a_list)
    print(a_list)
    

      

  • 相关阅读:
    Kubernetes集群管理工具kubectl命令技巧大全
    LVM 逻辑卷扩容
    制作 Ubuntu 16.04 离线apt源
    Kubernetes 存储简介
    处理K8S PVC删除后pod报错
    处理 K8S Orphaned pod found
    Kubernetes之GlusterFS集群文件系统高可用安装,提供动态卷存储
    Linux安装MYSQL并部署主从复制集群
    CentOS 7.4通过rpm包离线安装 Mysql8.0并部署主从复制(附从库备份脚本)
    容器化安装Mysql 8.0 并部署主从复制
  • 原文地址:https://www.cnblogs.com/zangkuo/p/8455737.html
Copyright © 2011-2022 走看看