排序
排序
概述
-
排序的稳定性:序列按某一关键字进行排序,排序前相等元素的先后次序在排序后保持不变,则称该排序方式是稳定的。
-
内排序:待排对象全部进入内存中。
-
外排序:排序过程需要在内外存之间多次交换数据。
-
排序算法性能
- 时间性能
- 辅助空间
- 算法复杂度:
-
七大排序算法
简单算法:
- 冒泡排序
- 简单排序
- 直接插入排序
改进算法:
- 希尔排序
- 堆排序
- 归并排序
- 快速排序
一、冒泡排序(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) 编辑 收藏 举报