日食三餐夜眠六尺

导航

排序

排序

概述

  • 排序的稳定性:序列按某一关键字进行排序,排序前相等元素的先后次序在排序后保持不变,则称该排序方式是稳定的。

  • 内排序:待排对象全部进入内存中。

  • 外排序:排序过程需要在内外存之间多次交换数据。

  • 排序算法性能

    1. 时间性能
    2. 辅助空间
    3. 算法复杂度:
  • 七大排序算法

    简单算法:

    1. 冒泡排序
    2. 简单排序
    3. 直接插入排序

    改进算法:

    1. 希尔排序
    2. 堆排序
    3. 归并排序
    4. 快速排序

一、冒泡排序(Bubble Sort)

1.简单冒泡排序

  • 基本思想:从上往下,两层循环,每次第 i 个元素与下面剩余元素两两比较,如果反序则交换,直到没有反序的记录为止。

    def bubble_sort(alist):
        for i in range(len(alist)-1):
            for j in range(i,len(alist)):
                if alist[i] > alist[j]:
                    alist[i],alist[j] = alist[j],alist[i]
        return alist
    

2.正宗冒泡排序

  • 基本思想:从下往上(冒泡),两层循环,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

    def bubble_sort(alist):
        for i in range(len(alist)-1):
          for j in range(len(alist)-1,i,-1):
                if alist[j] < alist[j-1]:
                	alist[j],alist[j-1] = alist[j-1],alist[j] 
        return alist
    

3.优化冒泡排序

  • 基本思想:正宗冒泡排序算法的基础上添加标记变量exchange,用来判断每趟两两比较过程是否发生交换操作,若未发生则说明后面元素次序满足要求,排序提前完成。

    def bubble_sort(alist):
        exchage = True
        i = 0
        while exchage and (i<=len(alist)-1):
            exchage = False
            for j in range(len(alist)-1,i,-1):
                if alist[j] < alist[j-1]:
                    exchage = True
                    alist[j],alist[j-1] = alist[j-1],alist[j]                       	
            i=i+1
        return alist
    

二、选择排序

  • 基本思想:每次找出“最元素”

    def findSmallest(arr): # 最小元素索引函数
        smallest = arr[0]
        smallest_index = 0
        for i in range(1,len(arr)):
            if arr[i] < smallest:
                smallest = arr[i]
                smallest_index = i
        return smallest_index
    
    def selectSort(arr): # 选择排序
        newArr = []
        for i in range(len(arr)):
            smallest_index = findSmallest(arr)
            newArr.append(arr.pop(smallest_index))
        return newArr
    

posted on 2020-05-20 22:13  chenxiaoyuan  阅读(80)  评论(0编辑  收藏  举报