1.学习直接插入排序的排序思想,直接插入排序属于插入排序的一种,理解为什么插入排序算法不是全局有序的。 2.利用直接插入排序算法解决排序问题,要求输入为排序表有10个元素,其关键字序列为(9,8,7,6,5,4,3,2,1,0),输出为关键字从小到大排序的序列。
时间: 2024-10-13 07:12:20 浏览: 20
数据结构课程设计各种排序算法比较.doc
1. **直接插入排序**的思想非常直观,它的基本步骤是每次从未排序的部分选择一个元素,然后将其插入到已排序序列的正确位置。这里的关键在于"直接",即对于每一个元素,我们从后向前查找已排序的序列,找到合适的位置就将该元素插入。所以,即使开始时数组是无序的,每一次操作都会使当前位置及其后续的子序列保持有序。
插入排序之所以不是全局有序的,是因为它的过程是局部化的:每一次只关注未排序部分的第一个元素,直到整个序列都被处理过。因此,在最坏的情况下,当输入数据完全逆序时,需要进行n(n-1)/2次比较和移动操作,效率较低。
2. **解决排序问题示例:**
假设我们有一个包含10个元素的数组,其初始顺序为(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)。使用直接插入排序,我们可以逐步地进行以下步骤:
- 第1步:假设第一个元素9已经排序,不需要移动。
- 第2步:将8与已排序的9比较,因为8小于9,交换它们的位置,得到(8, 9, 7, 6, 5, 4, 3, 2, 1, 0)。
- ...重复此过程,直到所有元素都有序。
这里是一个简单的Java代码实现,用于对给定的列表进行直接插入排序:
```java
public class InsertionSort {
public void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
// 测试用例
public static void main(String[] args) {
int[] unsortedArray = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
InsertionSort sorter = new InsertionSort();
sorter.sort(unsortedArray);
System.out.println("Sorted array: " + Arrays.toString(unsortedArray));
}
}
```
运行这段代码,你会看到输出为`[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`,这就是按照从小到大的顺序排列的结果。
阅读全文