基本排序算法(Python实现)
2018-02-03 16:38
423 查看
Python列表基本排序算法
1.选择排序在每次循环中将剩下未排序的最小值交换到未排序的最前一位。
def selectionSort(lyst): for i in range(0, len(lyst) - 1): minIndex = i for j in range(i + 1, len(lyst)): if lyst[j] < lyst[minIndex]: minIndex = j lyst[i], lyst[minIndex] = lyst[minIndex], lyst[i] return lyst
2.冒泡排序
两两比较,每次外循环中将最大的值取到最后一位。
def bubbleSort(lyst): n = len(lyst) while n > 1: for i in range(0, n - 1): if lyst[i] > lyst[i + 1]: lyst[i], lyst[i + 1] = lyst[i + 1], lyst[i] n -= 1 return lyst
3.插入排序
在每次循环时,将该项按顺序插入到前面若干项中的正确位置。这样在每次外循环结束时,前面均排序成功。(类似扑克牌的摆牌顺序,随着循环到新的位置,前面的数项均已排序完毕。)
def insertionSort(lyst): for i in range(0, len(lyst)): j = i - 1 itemToInsert = lyst[i] while j >= 0: if itemToInsert < lyst[j]: lyst[j + 1] = lyst[j] j -= 1 else: break lyst[j + 1] = itemToInsert return lyst
更快的排序
1.快速排序选取中点作为基准点进行分区,然后对分区迭代排序
def quickSort(lyst, left, right): if left > right: return lyst mid = (left + right) // 2 # 将中点作为基准点,并与最右点交换位置 key = lyst[mid] lyst[mid], lyst[right] = lyst[right], lyst[mid] boundary = left # 以最左设置边界 # 将小于基准点的数都放置在边界左边 for index in range(left, right): if lyst[index] < key: lyst[index], lyst[boundary] = lyst[boundary], lyst[index] boundary += 1 # 将基准点移至边界位置 lyst[boundary], lyst[right] = lyst[right], lyst[boundary] quickSort(lyst, left, boundary - 1) quickSort(lyst, boundary + 1, right) return lyst
2.合并排序
将列表一分为二递归分成一个个的字列表,排序每个子列表并按正确排序存放在另一缓存列表中,每次循环排序后将缓存列表中的数对应位置写入当前列表。
def merge(lyst, left, mid, right, copyBuffer): i1 = left i2 = mid + 1 for i in range(left, right + 1): if i1 > mid: copyBuffer[i] = lyst[i2] i2 += 1 elif i2 > right: copyBuffer[i] = lyst[i1] i1 += 1 elif lyst[i1] < lyst[i2]: copyBuffer[i] = lyst[i1] i1 += 1 else: copyBuffer[i] = lyst[i2] i2 += 1 for i in range(left,right+1): lyst[i] = copyBuffer[i] def mergeSortHelper(lyst, left, right, copyBuffer): if left < right: mid = (left + right) // 2 mergeSortHelper(lyst, left, mid, copyBuffer) mergeSortHelper(lyst, mid + 1, right, copyBuffer) merge(lyst, left, mid, right, copyBuffer) def mergeSort(lyst): copyBuffer = list(len(lyst) * " ") mergeSortHelper(lyst, 0, len(lyst) - 1, copyBuffer) lyst = [4,1,7,6,5,3,8,2] mergeSort(lyst)
相关文章推荐
- 基本排序算法:Python实现
- 用Python实现基本排序算法01——冒泡排序
- 基本排序算法:Python实现
- 总结:python关于一些基本排序算法的实现
- 基本排序算法:Python实现
- 基本排序算法的Python实现
- 基本排序算法[python实现]
- 用Python实现基本排序算法03——插入排序
- Python实现基本排序算法01
- 用Python实现基本排序算法02——选择排序
- Python之基本排序算法的实现
- 用Python实现基本排序算法04——Shell排序
- 基本排序算法的Python实现
- 部分排序算法的基本思想及用python3 实现
- PHP 四种基本排序算法的代码实现
- Python实现基本线性数据结构
- 基本排序算法java实现
- PHP实现四种基本排序算法
- 【矩阵分解】Python下基于Numpy的四种矩阵基本分解的实现
- Python笔记——排序算法的实现