python实现排序算法
经常忘,每次都要从网上查一下,每次查的都不一样,还是记录一下吧
1、选择排序
从一堆数中选择最小的,往前放
def selectSort(arr): for i in range(len(arr)-1): key = i for j in range(i+1,len(arr)): if(arr[j] < arr[key]): key = j if key != i: arr[key],arr[i] = arr[i],arr[key] return arr
2、冒泡排序
最大的浮起来,放到最后;重点:相邻元素比较,交换
def bubSort(arr): for i in range(len(arr)-1): for j in range(1,len(arr)-i): if arr[j-1] > arr[j]: arr[j-1],arr[j] = arr[j],arr[j-1] return arr
3、插入排序
后面的数据按照顺序往前插入
def insertSort(arr): for i in range(1,len(arr)): temp = arr[i] j = i - 1 while (j >= 0 and arr[j] > temp): arr[j + 1] = arr[j] j -= 1 arr[j + 1] = temp return arr
4、快速排序(面试重点)
找一个基准值,二分,比它大的放后面,比它小的放前面,重复多次,直到不能二分为止
def quickSort(arr,left,right): if left < right: mid = partition(arr,left,right) quickSort(arr,left,mid-1) quickSort(arr,mid+1,right) return arr def partition(arr,left,right): i = left - 1 for j in range(left,right): if arr[j] < arr[right]: i += 1 arr[i],arr[j] = arr[j],arr[i] i += 1 arr[i],arr[right] = arr[right],arr[i] return i
5、归并排序(面试重点)
先切,切到一个数为一组,再合并,合并过程按大小排序
def mergeSort(arr): if len(arr) < 2: return arr mid = len(arr) // 2 left = mergeSort(arr[:mid]) right = mergeSort(arr[mid:]) return merge(left,right) def merge(a,b): c = [] i = j = 0 while i < len(a) and j < len(b): if a[i] < b[j]: c.append(a[i]) i += 1 else: c.append(b[j]) j += 1 c.extend(a[i:]) c.extend(b[j:]) return c print(mergeSort(arr))