- 冒泡排序
原理:
比较相邻的两个元素的大小,如果前面的元素大于后面的元素,就交换两个元素的值。比较最后两个元素后,最后一个元素就是最大的值。重复比较所有的元素,直到不出现前面的元素大于后面的元素。这样我们就可以得到一个从小到大的列表。
"冒泡排序" array = [1,2,4,1,3,5,-1,4,7,5,9,-5] lenth = len(array)-1 def BubbleSort(array): for i in range(lenth): if i<=lenth: for j in range(lenth-i): if array[j]>array[j+1]: array[j],array[j+1] = array[j+1],array[j] return array print(BubbleSort(array))
- 快速排序
原理:
快速排序采用的是,先选择一个基准值,这个基准值采用的是中间下标的值,利用这个基准值来比较列表。再定义两个数组left,right。比基准值小的数值放入到left数组中,比基准值大的数值放入到right数组中。最后对这两个数组重复以上的步骤,就可以得到排序好的数组。
"快速排序" array = [1,2,4,1,3,5,-1,4,7,5,9,-5] def QuickSort(array): left ,right =[],[] if len(array) > 2: mid = array[len(array)//2] array.remove(mid) for i in array: if i<mid: left.append(i) else: right.append(i) return QuickSort(left)+[mid]+QuickSort(right) return array print(QuickSort(array))
- 直接插入排序
原理:
选取一个基准值,这个基准值开始时可以选择下标为i=1的元素,以这个基准值比较其前面的元素。如果该基准值小于前面下标为x的值,就将该值插入到下标为x的元素。然后下标向右移动,直到i=len(array)-1时为止,这时得到的就是一个新的有序表。
"直接插入排序" array = [1,2,4,1,3,5,-1,4,7,5,9,-5] def InsertionSort(array): for i in range(1, len(array)): mark = array[i] j = i-1 while j >=0 and mark < array[j] : array[j+1] = array[j] j -= 1 array[j+1] = mark return array print(insertionSort(array))
- 希尔排序
希尔排序是直接插入排序的升华版,比直接插入排序快,还不容易崩盘。
希尔排序采用的是增量插入,先来明确这个增量取法:
gap = len(array)/2
gap = gap/2 ....
直到 gap = 1时,基本上该序列就为有序的序列,最后再执行一个直接插入就行。
"希尔排序" array = [1,2,4,1,3,5,-1,4,7,5,9,-5] def shellSort(array): leng = len(array) gap = int(leng/2) while gap>0: for i in range(gap,leng): mark = array[i] j = i if j>=gap and array[j-gap]>mark: array[j] = array[j-gap] j -= gap array[j] = mark gap = int(gap/2) return array print(shellSort(array))
- 选择排序
原理:
该排序也是先确定一个基准值,先以此基准值为最小值下标为0,用这个“最小值”对比其他的元素,如果出现有元素x比该基准值小时,将x的下标替换掉该基准值的下标,一直循环到最后一个元素,这样得到的最小元素就是当前最小的值。然后重复该步骤,直到基准值的下标为len(array)-1时结束循环,这样就得到了一个排序好的新表。
"选择排序" array = [1,2,4,1,3,5,-1,4,7,5,9,-5] def SelectSort(array): leng = len(array) for i in range(leng): min = i for j in range(i+1,leng): if array[j]<array[min]: min = j array[i],array[min] = array[min],array[i] return array print(SelectSort(array))