1、排序算法的稳定性
指经过特定规则进行排序后,两个都满足排序规则,无法判断,哪一个排在前面,哪一个排在后面,这类的元素,如果按照原来的顺序,进行排列,则为稳定,否则为不稳定。
举例, (4,1),(3,1),(3,7),(5,6),我们将这个四个元祖,以第一个元素的大小,从小到大进行排序。那么对于(3,1)和(3,7)而言有两种排列方式
(3,1),(3,7),(4,1),(5,6)这种排序中的(3,1),(3,7)是以原来的顺序进行排列的,称之为稳定。
(3,7),(3,1),(4,1),(5,6)这种改变了原来的排序方式,称之为不稳定。
2、排序算法们
2.1 冒泡排序
冒泡排序的基本思想:
每一个元素都和下一个元素进行比较大小,哪一个元素大就将大的元素向后移动,然后这个大的元素,在和下一个元素进行比较,一次向下进行,直到队列的尾部,这样就找了最大数。
然后开始第二次进行进行上面的步骤,找到第二大的数。依次向下进行。
def bubblesort(sequence):
length = len(sequence) #获取序列的长度
for i in range(length-1): #一共要循环这个序列多少次
#考虑特殊情况 ,就是这个序列本身就是一个有序的,那么对于这个序列来讲,我就没有
#进行过位置互换,所以,当进入循环进行判断后,这个count一遍是一直没有执行的,#
#如果第一次全部比较过后,都没有发生过替换,直接退出即可
count = 0
for j in range(length-1-i): #每一次循环,循环序列中元素的个数
if sequence[j]>sequence[j+1]: #当前元素和后一个元素进行大小判断
sequence[j], sequence[j+1] = sequence[j+1], sequence[j] #进行位置互换
count += 1
if count == 0:
return sequence
return sequence
if __name__ == '__main__':
a = [10,30,15,12,6,9,45,2,6,50]
print(a)
print(bubblesort(a))
2.2 选择排序
def selectsort(sequence):
'''选择排序'''
n = len(sequence) #获取列表的长度
for i in range(n-1): #判断这种逻辑需要多少次
min=i
for j in range(1+i , n-1): #每一次