数据结构排序算法pyhon
时间: 2023-05-25 22:04:49 浏览: 148
一种基于梯度方向直方图的俯视行人的检测方法
1. 冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就进行交换。走访数列的工作会重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
Python 代码:
```python
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 这里j只需要遍历到n-i-1就好了,因为前面的已经排好序了
for j in range(n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print(arr)
```
输出结果: `[11, 12, 22, 25, 34, 64, 90]`
2. 选择排序
选择排序是一种简单直观的排序算法。它的工作原理:首先在未排序的数列中找到最小元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
Python 代码:
```python
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print(arr)
```
输出结果: `[11, 12, 22, 25, 34, 64, 90]`
3. 插入排序
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
Python 代码:
```python
def insertion_sort(arr):
n = len(arr)
for i in range(1, n):
key = arr[i]
j = i-1
while j >= 0 and arr[j] > key:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
arr = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(arr)
print(arr)
```
输出结果: `[11, 12, 22, 25, 34, 64, 90]`
4. 快速排序
快速排序是一种高效的排序算法,采用了分治思想。它的基本思路是:先从数列中取出一个数作为基准数,然后将数组中小于该数的数放在其左边,大于该数的数放在其右边。然后再对左右区间重复该过程,直到各区间只有一个数。
Python 代码:
```python
def quick_sort(arr, start, end):
if start < end:
pivot_index = partition(arr, start, end)
quick_sort(arr, start, pivot_index-1)
quick_sort(arr, pivot_index+1, end)
# 划分函数
def partition(arr, start, end):
# 选取最后一个元素作为基准数
pivot = arr[end]
i = start - 1
for j in range(start, end):
if arr[j] < pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[end] = arr[end], arr[i+1]
return i+1
arr = [64, 34, 25, 12, 22, 11, 90]
quick_sort(arr, 0, len(arr)-1)
print(arr)
```
输出结果: `[11, 12, 22, 25, 34, 64, 90]`
5. 归并排序
归并排序是采用分治法的一种排序算法,该算法采用先分后治的思路,先将问题分解成一些小的子问题,然后逐个解决子问题,最后将结果合并起来。归并排序的核心是合并两个有序序列,这个过程非常简单。
Python 代码:
```python
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_arr = merge_sort(arr[:mid])
right_arr = merge_sort(arr[mid:])
return merge(left_arr, right_arr)
# 合并两个有序序列
def merge(left_arr, right_arr):
i = j = 0
merged_list = []
while i < len(left_arr) and j < len(right_arr):
if left_arr[i] < right_arr[j]:
merged_list.append(left_arr[i])
i += 1
else:
merged_list.append(right_arr[j])
j += 1
merged_list += left_arr[i:]
merged_list += right_arr[j:]
return merged_list
arr = [64, 34, 25, 12, 22, 11, 90]
arr = merge_sort(arr)
print(arr)
```
输出结果: `[11, 12, 22, 25, 34, 64, 90]`
阅读全文