排序算法
来源:互联网 发布:中巴经济走廊意义知乎 编辑:程序博客网 时间:2024/06/05 05:37
1. 插入排序
基本思想
插入排序的基本思想如下图所示
算法实现
def InsertSort(A): for i in range(1,len(A)): j=i-1 temp=A[i] while j>=0 and A[j] > temp: A[j+1] = A[j] j-=1 A[j+1] = temp return A>>> InsertSort([6,5,3,1,8,7,2,4])[1, 2, 3, 4, 5, 6, 7, 8]
用 python下的pop()
和insert()
函数来实现插入排序更直观:
def Insert_Sort(A): for i in range(1,len(A)): temp=A.pop(i) # 拿出第 i 个元素 j=i-1 while j>=0 and A[j] > temp: # 找出这个元素应插入的位置 j -= 1 A.insert(j+1,temp) # 插入元素 return A>>> Insert_Sort([6,5,3,1,8,7,2,4])[1, 2, 3, 4, 5, 6, 7, 8]
2. 冒泡排序
基本思想
代码实现
def BubbleSort(A): n=len(A) while n>1: for i in range(n-1): if A[i] > A[i+1]: A[i],A[i+1]=A[i+1],A[i] # 交换值 n -= 1 return A>>> BubbleSort([6,5,3,1,8,7,2,4])[1, 2, 3, 4, 5, 6, 7, 8]
3. 选择排序
基本思想
代码实现
def SelectionSort(A): n=len(A) for i in range(n-1): temp_min=i for j in range(i+1,n): if A[j] < A[temp_min]: temp_min=j # 记录最小值的下标 A[i],A[temp_min] = A[temp_min],A[i] # 交换值 return A>>> SelectionSort([5,6,4,8,1,2])[1, 2, 4, 5, 6, 8]
4. 归并排序
基本思想
代码实现
def Merge(left,right): # 合并两个有序数组 m, n = len(left), len(right) temp=[0]*(m+n) i, j ,k = 0, 0 , 0 while i<m and j<n: if left[i] < right[j]: temp[k] = left[i] i += 1 k += 1 else: temp[k] = right[j] j += 1 k += 1 if i != m: temp[k:] = left[i:] else: temp[k:] = right[j:] return tempdef MergeSort(lists): # 利用 Merge 函数递归实现归并排序 n = len(lists) if n <= 1: return lists mid = n // 2 left = MergeSort(lists[:mid]) right = MergeSort(lists[mid:]) return Merge(left,right)>>> MergeSort([6,5,3,1,8,7,2,4])[1, 2, 3, 4, 5, 6, 7, 8]
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 黑马程序员--集合
- 黑马程序员--多线程
- Android Studio快捷键
- 2015年58同城面试题
- 黑马程序员--IO流基础
- 排序算法
- 黑马程序员--正则表达式
- LightOJ 1258 - Making Huge Palindromes【kmp】
- php中cookie和Session的使用
- 新手关于如何看编程经典书的一些疑惑?[转]
- UFT中常见的问题
- 用宏定义来做两个数的交换
- poj3476 A Game with Colored Balls (优先队列,链表)
- [总结]RTMP流媒体技术零基础学习方法