美文网首页
排序算法-1

排序算法-1

作者: 木果渣 | 来源:发表于2017-12-17 23:37 被阅读0次

1.冒泡排序
2.选择排序
3.插入排序(直接插入)
4.归并排序

##Bubble Sort
#i: 0---->n-1
#j: 0---->n-1-i
#前一个比后一个大就交换
#1, 5, 9, 2, 4
# ----                 ----                 ----                 ----   
#[1, 5, 9, 2, 4]-->[1, 5, 9, 2, 4]-->[1, 5, 2, 9, 4]-->[1, 5, 2, 4, 9]
# ----                 ----                 ----
#[1, 5, 2, 4, 9]-->[1, 2, 5, 4, 9]-->[1, 2, 4, 5, 9]
# ----                 ----
#[1, 2, 4, 5, 9]-->[1, 2, 4, 5, 9]
# ----
#[1, 2, 4, 5, 9]

def bubble_sort(n):
    for i in range(0, len(n)):
        for j in range(0, len(n) - 1 - i):
            if n[j] > n[j+1]:
                n[j], n[j+1] = n[j+1], n[j]
    print(n)

##Selecttion Sort
#选出0--->n-1个里面最小的一个放到[0]  [0]和[min]交换
#选出1--->n-1个里面最小的一个放到[1]
#1, 5, 9, 2, 4
#
#[1, 5, 9, 2, 4]    min = 1
#    -     -            
#[1, 2, 9, 5, 4]    min = 2
#       -     - 
#[1, 2, 4, 5, 9]    min = 4
#
#[1, 2, 4, 5, 9]    min = 5

def selection_sort(n):
    index_min = 0
    for i in range(0, len(n)):
        minimum = n[i]      
        for j in range(i, len(n)):
            if n[j] < minimum:
                index_min = j
                minimum = n[j]
        n[index_min], n[i] = n[i], n[index_min]
    print(n) 

##Insert Sort
##0--->i-1 为排好序的部分
##i--->n-1 为待插入的部分 
#1, 3, 4, 7, 2
#插入 1:[(1), 3, 4, 7, 2]
#插入 3:[(1, 3), 4, 7, 2]     
#插入 2:[(1, 3, 4), 7, 2]
#插入 5:[(1, 3, 4, 7), 2] 2与7比较 交换-->2与4比较 交换     
#插入 4:[(1, 2, 3, 4, 7)] 
def insert_sort(n):
    for i in range(1, len(n)):  
        j = i - 1
        cur = n[i]
        while j>=0 and cur < n[j] :
            n[j], n[j+1] = n[j+1], n[j]
            j -= 1
    print(n)

##Merge Sort
#--------------------------------------
#-----ONE----
#合并两个排好序的list
# i 0---->2  j 3------->6
#  [1, 4, 8]  [2, 3, 5, 9]
#  比较array[i]和array[j],谁大放谁到temp中,相应光标i或者j+1
#  把两个分list剩下的部分 追加到temp
#
def merge(array, left, mid, right):
    len = right - left +1
    temp = [0]*len
    index = 0
    i = left
    j = mid + 1
    while i <= mid and j <= right:
        if array[i] <= array[j]:            
            temp[index] = array[i]
            i += 1
        else:           
            temp[index] = array[j]
            j += 1
        index += 1          
    while i <= mid:
        temp[index] = array[i]
        index += 1
        i += 1
    while j <= right:
        temp[index] = array[j]
        j += 1
        index += 1
    for num in temp:
        array[left] = num
        left += 1

##---TWO---
##分
#将list分为两部分
def merge_sort_recursion(array, left, right):
    
    if left == right:
        return
    
    mid = int((right + left)/2)
    merge_sort_recursion(array, left, mid)
    merge_sort_recursion(array, mid+1, right)
    
    merge(array, left, mid, right)

##---THREE---
def merge_sort(n):
    temp = [0] * len(n)
    merge_sort_recursion(n, 0, int(len(n) - 1)) 
    print(n)
##---------------------------------------------

bubble_sort([5, 3, 1, 9, 4, 20, 21, 10, 2, 2, 7])
selection_sort([5, 3, 1, 9, 4, 20, 21, 10, 2, 2, 7])
insert_sort([5, 3, 1, 9, 4, 20, 21, 10, 2, 2, 7])
merge_sort([5, 3, 1, 9, 4, 20, 21, 10, 2, 2, 7])

相关文章

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 面试算法知识梳理(12) - 二叉树算法第二部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

  • 面试算法知识梳理(13) - 二叉树算法第三部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

  • 阿里P8必备Java 知识点:算法、设计模式、语法,你值得拥有!

    排序算法 9 P1:排序算法的分类 排序算法可以分为内部排序和外部排序,在内存中进行的排序称为内部排序,当要排序的...

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 程序员应该掌握哪些算法

    程序员必须掌握的常用算法,主要包括以下内容: 算法: 1、排序算法:快速排序、归并排序、计数排序 2、搜索算法:回...

  • 2022-03-01

    1.排序算法: 到底什么是排序?-它是排列列表中项目顺序的算法。 重要的排序算法—— 冒泡排序:冒泡排序是最基本的...

  • 常用排序算法实现

    1、常见排序算法大致有以下几种:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序2、各种排序算法...

  • 排序算法(四)选择排序

    排序算法(四)选择排序 1.算法思路  选择排序(Selection-Sort)是一种简单直观的排序算法。它的工作...

  • 排序算法上——冒泡排序、插入排序和选择排序

    1. 排序算法? 排序算法应该算是我们最熟悉的算法了,我们学的第一个算法,可能就是排序算法,而在实际应用中,排序算...

网友评论

      本文标题:排序算法-1

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