1.快速排序
def fastChoose(self,list,left,right):
# left = 0
# right = len(list) -1
key = list[left]
while (left < right):
while (left < right and list[right] >= key): //先从右侧开始,与key值比较,一直到小于key值,然后把值赋予list[left];key值
right = right -1 //key值本身一直不变
list[left] = list[right]
while (left < right and list[left] <= key): //右侧变了一次后,换成左边开始与key值比较,一直到大于key值,然后把
left = left + 1 //list[left赋值给list[right].两边轮流与key值比较,直到一轮结束
list[right] = list[left]
list[left] = key //一轮结束,把key值赋予list[left]。这时key值到达了正确的位置
return left
def fast(self,list,left,right):
if left < right:
temp = self.fastChoose(list,left,right)
self.fast(list,left,temp-1) //然后这是key值的左边,再次排序,跟上面的规则一样
self.fast(list,temp+1,right) //这是key值的右侧列表,再次排序
return list
算法思想:一个数组,[11,2,5,8,1,13,12]
1.设定下标left,right,然后设定一个基准值key(随意设置,一般第一个)
2.先list[right]开始与key比较,小于key了,就把list[right]换到list[left]
3.再从左边开始与key比价,大于key,再换到list[right]
4.key值始终不变,最后left大于等于right时,把key值给list[left]
5.一趟下来,key值到了正确的排序位置。然后比key小的都到了左边,比key大的都到右边
key为11,[1, 2, 5, 8, 11, 13, 12]
6.然后key两边分别再次排序[1,2,5,8]和[11,13,12]
参考文献:https://www.jianshu.com/p/2b2f1f79984e
2.冒泡排序
def BubbleSort(self):
list = [6,5,2,14,4,9,54,14,98,56]
for j in range(0,len(list)-1):
for i in range(0,len(list)-1):
if list[i] > list[i+1]:
list[i] , list[i+1] = list[i+1] , list[i]
print(list)
算法思想:
1.两两对比,一轮下来,把最大值放到了最右侧,[X,X,X,X,X,X,X,98];
2. 第二轮下来,[X,X,X,X,X,X,X,56,98]
3. 第三轮下来,[X,X,X,X,X,X,54,56,98],以此类推,排序完成
3.选择排序
def straightSelectSort(self,list):
for j in range(0,len(list)-1):
for i in range(j,len(list)-1):
if list[j] > list[i+1]:
list[j] , list[i+1] = list[i+1] , list[j]
print(list)
算法思想:
1.第一轮j=0,取后面所有的值,与第一个对比,然后得到最小值,放第一个list[0]
2.第二轮j=1,取所后面有的值,与第二个对比,然后得到最小值,放第二个list[1]
3.以此类推,排序完成