数据结构 建立100个以上的元素的线性表 分别利用选择类排序 插入类排序 交换类排序 归并排序等各种排序方法对他们进行排序 并输出各自的比较和移动次数 源代码
时间: 2024-09-09 14:06:10 浏览: 66
数据结构中的线性表,如数组或链表,可以用来存储一系列有序或无序的数据元素。对于100个以上的元素,我们可以使用各种排序算法对其进行操作。以下是针对选择排序、插入排序、交换排序(冒泡排序)和归并排序的基本概述:
1. **选择排序**:
- 比较次数:n(n-1)/2(每次遍历找出最小值)
- 移动次数:n*(n-1)/2,因为需要将最大元素放到正确位置
- 源代码示例(Python):
```python
def selection_sort(lst):
comparisons = 0
moves = 0
for i in range(len(lst)):
min_index = i
for j in range(i+1, len(lst)):
comparisons += 1
if lst[j] < lst[min_index]:
min_index = j
lst[i], lst[min_index] = lst[min_index], lst[i]
moves += abs(i - min_index)
return lst, comparisons, moves
```
2. **插入排序**:
- 比较次数:n^2
- 移动次数:最好情况O(n),最坏情况和平均情况都是O(n^2),取决于输入的初始状态
- 源代码示例(Python):
```python
def insertion_sort(lst):
comparisons = 0
moves = 0
for i in range(1, len(lst)):
key = lst[i]
j = i - 1
while j >= 0 and key < lst[j]:
comparisons += 1
lst[j + 1] = lst[j]
moves += 1
j -= 1
lst[j + 1] = key
return lst, comparisons, moves
```
3. **交换排序(冒泡排序)**:
- 比较次数:n*(n-1)/2
- 移动次数:最多n*(n-1)/2次(如果列表已经部分排序,则较少)
- 源代码示例(Python):
```python
def bubble_sort(lst):
comparisons = 0
moves = 0
for i in range(len(lst) - 1):
for j in range(len(lst) - 1 - i):
comparisons += 1
if lst[j] > lst[j + 1]:
lst[j], lst[j + 1] = lst[j + 1], lst[j]
moves += 1
return lst, comparisons, moves
```
4. **归并排序**:
- 比较次数:O(n log n)
- 移动次数:O(n)
- 源代码示例(Python):
```python
def merge_sort(lst):
comparisons, moves = 0, 0
# ... (递归分割、合并过程略)
return sorted_lst, comparisons, moves # 这里假设merge_sort函数返回已排序的列表及计数
```
每个算法的具体比较和移动次数计算会依赖于实际实现细节和输入数据。运行这些排序算法时,你可以分别计算它们的结果。注意,这只是一个简化版的实现,实际应用可能会有更复杂的优化。在输出结果时,记得提供每个排序后的列表以及相应的比较和移动次数。
阅读全文