一、排序算法?
简单介绍几个主流排序算法其主要思想和实现方式
二、选择排序
1.算法思想
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
2.程序示例
代码如下(示例):
def SelectionSort(a):
n = len(a)
for i in range(n-1):
min = i
for j in range(i+1,n):
if a[j] < a[min]:
min = j
a[i],a[min] = a[min],a[i]
print(a)
a = [8,5,6,4,3,7,10,2]
SelectionSort(a)
三、冒泡排序
1.算法思想
两两相邻的元素进行比较,如果前面元素大于后面元素就交换两个元素的位置,最终的结果是最大的一个元素移动到了最后的位置。再将剩余n-1个元素按照上述原理进行比较,让次大的数放在倒数第二的位置,依次循环,直至所有的元素有序的排列。
2.程序示例
代码如下(示例):
def BubbleSort(a):
n = len(a)
for i in range(n-1,-1,-1):
for j in range(0,i):
if a[j] > a[j+1]:
a[j],a[j+1]= a[j+1],a[j]
print(a)
a = [8,5,6,4,3,7,10,2]
BubbleSort(a)
四、插入排序
1.算法思想
假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。
2.程序示例
代码如下(示例):
def InsertionSort(a):
n = len(a)
for i in range(1,n):
x = a[i]
j = i-1
while j >=0:
if x <= a[j]:
a[j+1] = a[j]
j -= 1
else:
break
a[j+1] = x
print(a)
a = [8,5,6,4,3,7,10,2]
InsertionSort(a)
五、快速排序
1.算法思想
首先设定一个分界值,将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
2.程序示例
代码如下(示例):
def QuickSortPivot(a, start, end):
pivot = start
j = start + 1
for i in range(start + 1, end + 1):
if a[i] <= a[pivot]:
a[i], a[j] = a[j], a[i]
j += 1
a[pivot], a[j - 1] = a[j - 1], a[pivot]
pivot = j - 1
print(a[pivot], a[start:pivot], a[pivot + 1:end + 1])
return pivot
def QuickSort(a, start, end):
if start >= end:
return
pivot = QuickSortPivot(a, start, end)
QuickSort(a, start, pivot - 1)
QuickSort(a, pivot + 1, end)
a = [8, 4, 3, 5, 9, 10, 15, 23, 0, 1, -1, 97]
QuickSort(a, 0, len(a) - 1)
print(a)