zoukankan      html  css  js  c++  java
  • python实现四种排序逻辑与代码

    参考链接:https://blog.csdn.net/u010786109/article/details/41911401 

    1、冒泡排序

    原理:对一组数据,比较相邻数据的大小,将值小数据放在前面,值大的数据放在后面。

    比较结论:对于一个长度为N的数组,我们需要排序 N-1 轮,每 i 轮 要比较 N-i 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。

    实现代码:

    2、快速排序

    原理:

    步骤

      1. 获得待排序数组a
      2. 选取一个合适的数字p(一般来说就选取数组或是子数组的第一个元素)作为排序基准
      3. 将待排序数组a中比基准p小的放在p的左边,比基准p大的放在p的右边 
      4. 从第3步获得的两个子数组sub1跟sub2
      5. 判断sub1或sub2中是否只有一个元素,如果只有一个元素则返回此元素,否则就将sub1(或是sub2)代回到第1步中继续执行
      6. 具体过程可以参见下面的过程

    实现代码:

    # coding:utf-8
    # 冒泡排序实现
    def bubbleSort(data):
        if len(data) < 2:
            return data
        else:
            for i in range(0, len(data) - 1):
                m = i
                for j in range(i + 1, len(data)):
                    if data[m] > data[j]:
                        m = j
                if m != i:
                    # 不使用中间元素,下面语句直接完成两个数组元素交换
                    data[i], data[m] = data[m], data[i]
            return data
    
    
    # 插入排序实现
    def insertSort(data):
        if len(data) < 2: return data
        for i in range(1, len(data)):
            key = data[i]
            j = i - 1
            while j >= 0 and key < data[j]:
                data[j + 1] = data[j]
                j = j - 1
            data[j + 1] = key
        return data
    
    
    # 快速排序实现
    def partition(data, p, r):
        i = p - 1
        cmp = data[r]
        for j in range(p, r):
            if data[j] < cmp:
                i = i + 1
                if i <> j: data[i], data[j] = data[j], data[i]
    
        if (i + 1) <> r: data[i + 1], data[r] = data[r], data[i + 1]
        return i + 1
    
    
    def randomPartition(data, p, r):
        import random
        i = random.randint(p, r)
        data[i], data[r] = data[r], data[i]
        return partition(data, p, r)
    
    
    def quickSort(data, p, r):
        if p < r:
            # q = partition(data, p, r)
            q = randomPartition(data, p, r)
            quickSort(data, p, q - 1)
            quickSort(data, q + 1, r)
    
    
    # 归并排序
    from heapq import merge
    def merge_sort(m):
        if len(m) <= 1:
            return m
    
        middle = len(m) / 2
        left = m[:middle]
        right = m[middle:]
    
        left = merge_sort(left)
        right = merge_sort(right)
        return list(merge(left, right)
    
    # 创建一个100个元素的数组,每次用shuffle打乱之后再排序
    from random import shuffle, sample
    numbers = sample(range(10), 9)
    
    shuffle(numbers)
    print numbers
    print 'after sorted:'
    insertSort(numbers)
    print numbers
    
    #冒泡排序
    shuffle(numbers)
    print numbers
    print 'after sorted:'
    bubbleSort(numbers)
    print numbers
    
    shuffle(numbers)
    print numbers
    print 'after sorted:'
    quickSort(numbers, 0, len(numbers) - 1)
    print numbers
    
    shuffle(numbers)
    print numbers
    print 'after sorted:'
    numbers = merge_sort(numbers)
    print numbers
  • 相关阅读:
    python练习题6.1输入列表,求列表元素和(eval输入应用)
    python练习题5.10两数之和(没有用字典)
    python练习题5.8能被3,5和7整除的数的个数(用集合实现)-没有用集合
    python练习题5.7列表去重(存在问题)
    python练习题5.6统计工龄
    python练习题5.5统计字符出现次数
    python练习题5.4分析活动投票情况
    python练习题5.3四则运算(用字典实现)
    Object.style.display = value的值完成显示隐藏
    js通过Object.style.property=new style;改变html样式
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/9263941.html
Copyright © 2011-2022 走看看