主要是插入排序和快速排序。
插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。第i次插入以前,已排序的序列为前i个,后面的n-i个未排序。
具体算法描述如下:
Python实现如下。
def insertSort(L):
size = len(L)
for i in range(1,size):
key = L[i]
j = i
while(j>=1):
if key < L[j-1]:
L[j] = L[j-1]
else:
break
j=j-1
L[j] = key
print(L)
L = [1,4,6,9,2,0,3,8,7,5,6]
print L
insertSort(L)
结果如图。
插入排序是稳定排序,其时间复杂度为O(n^2),空间复杂度为O(1)。为了提高查找效率,可以将第i个元素查找位置改为二分查找,可以有效降低比较的次数,但移动的次数不会改变。
快速排序
快速排序(Quicksort)是对起泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
def quickSort(L,left,right):
if left < right:
i = left
j = right
middle = L[left]
while i<j:
while L[j]>middle and i<j:
j -= 1
if i == j:
L[i] = middle
break
L[i] = L[j]
i += 1
while L[i]<middle and i<j:
i += 1
if i == j:
L[i] = middle
break;
L[j] = L[i]
j -= 1
L[i] = middle
print L
quickSort(L,left,i-1)
quickSort(L,i+1,right)
L = [1,4,6,9,2,0,3,8,7,5]
print L
quickSort(L,0,len(L)-1)
结果如图。