冒泡排序
相邻元素两两进行比较,每次比较结束都得到数组中最大的元素
#冒泡排序
def bubblesort(bubbleList):
#外层循环,整个数组的长度
flag = True
n = len(bubbleList)
while(n):
#内层循环,相邻两个数之间进行比较
#比如四个数字两两比较只需要3次,所以要减一
for i in range(n-1):
#从小到大排序:前一个>后一个,则交换
if bubbleList[i]>bubbleList[i+
在计算机科学中,排序算法是数据处理的重要组成部分,它们用于对一组数据进行排列,以便于检索、分析或进一步处理。本文将重点介绍三种基础的排序算法:冒泡排序、插入排序和选择排序。
我们来看冒泡排序。冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历数组,比较相邻的两个元素并根据需要交换它们的位置,使得每一次遍历都能将未排序的最大元素“浮”到数组的末尾。具体实现如以下代码所示:
```python
def bubblesort(bubbleList):
flag = True
n = len(bubbleList)
while(n):
for i in range(n-1):
if bubbleList[i] > bubbleList[i+1]:
bubbleList[i], bubbleList[i+1] = bubbleList[i+1], bubbleList[i]
flag = False
if flag:
break
n -= 1
return bubbleList
```
冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。虽然效率不高,但其优势在于实现简单且稳定,即相等的元素在排序后不会改变相对顺序。
接下来是插入排序,它从数组的第二个元素开始,将每个元素插入到已排序的序列中,通过与前面的元素进行比较来确定其正确位置。插入排序的Python实现如下:
```python
def insertion_sort(Insertion_List):
n = len(Insertion_List)
for i in range(1, n):
key = Insertion_List[i]
j = i - 1
while j >= 0 and Insertion_List[j] > key:
Insertion_List[j + 1] = Insertion_List[j]
j -= 1
Insertion_List[j + 1] = key
return Insertion_List
```
插入排序的时间复杂度也是O(n^2),但它在处理部分有序的数据时效率较高,且同样是一种稳定的排序算法。
最后是选择排序,它通过找到数组中最小(或最大)的元素,将其与第一个未排序的位置交换,然后在剩余元素中重复此过程。选择排序的Python实现如下:
```python
def select_sort(select_List):
n = len(select_List)
for i in range(n):
min_num = i
for j in range(i+1, n):
if select_List[j] < select_List[min_num]:
min_num = j
select_List[min_num], select_List[i] = select_List[i], select_List[min_num]
return select_List
```
选择排序的时间复杂度同样为O(n^2),但它是不稳定的,即相等的元素可能会改变它们的相对顺序。尽管如此,由于它只需要一个额外的空间用于临时存储,所以空间复杂度为O(1),这在内存有限的情况下是一个优点。
总结起来,冒泡排序、插入排序和选择排序都是基于比较的排序算法,它们在不同的场景下各有优劣。冒泡排序适用于小规模数据或接近有序的数据,插入排序在部分有序的数据上表现优秀,而选择排序则在内存限制的环境中较为适用。然而,在大数据量的排序需求中,这些简单的算法通常会被更高效的排序算法如快速排序、归并排序或堆排序所取代。