9.把关键字序列{1,2,3,4,7,5}从小到大排序,最好采用 排序算法能使得元素之间比较次数最少。
时间: 2023-09-27 22:12:05 浏览: 105
关键字序列{1,2,3,4,7,5}最好采用插入排序算法,因为它是在已经排好序的序列中插入新元素,每次只需要与前面一个元素比较即可,如果待插入元素比前一个元素小,则交换位置,直到找到合适的位置插入为止。由于插入排序算法是稳定的,因此它可以保证序列中相等的元素相对位置不变。采用插入排序算法对于给定的关键字序列,元素之间比较次数最少,是最优的选择。
相关问题
1.以关键字序列(15,8,12,26,9,17,7,25,3,4) 为例,手工执行 以下排序算法,假设从小到大排序。 (1)前三趟直接插入排序(每趟都写): (2)希尔排序(增量序列为5,3, 1 (3)前三趟冒泡排序(每趟都写): 4)前三趟简单选择排序 (每趟都写): (5)以第一个元素为基准,一趟排序后的结果:
1. 直接插入排序:
第一趟排序,将第二个元素8插入到前面已经排好序的子序列中:
[8, 15, 12, 26, 9, 17, 7, 25, 3, 4]
第二趟排序,将第三个元素12插入到前面已经排好序的子序列中:
[8, 12, 15, 26, 9, 17, 7, 25, 3, 4]
第三趟排序,将第四个元素26插入到前面已经排好序的子序列中:
[8, 12, 15, 26, 9, 17, 7, 25, 3, 4]
插入排序结束,得到有序序列:
[8, 12, 15, 26, 9, 17, 7, 25, 3, 4]
2. 希尔排序:
第一趟排序(增量为5),将序列分为5个子序列,对每个子序列进行插入排序:
[17, 4, 12, 26, 3, 15, 7, 25, 9, 8]
第二趟排序(增量为3),将序列分为3个子序列,对每个子序列进行插入排序:
[3, 4, 7, 25, 9, 8, 12, 26, 15, 17]
第三趟排序(增量为1),对整个序列进行直接插入排序:
[3, 4, 7, 8, 9, 12, 15, 17, 25, 26]
希尔排序结束,得到有序序列:
[3, 4, 7, 8, 9, 12, 15, 17, 25, 26]
3. 冒泡排序:
第一趟排序:
[8, 12, 15, 9, 17, 7, 25, 3, 4, 26]
第二趟排序:
[8, 12, 9, 15, 7, 17, 3, 25, 4, 26]
第三趟排序:
[8, 9, 12, 7, 15, 3, 17, 4, 25, 26]
冒泡排序结束,得到有序序列:
[8, 9, 7, 12, 3, 15, 4, 17, 25, 26]
4. 简单选择排序:
第一趟排序,找到最小的元素3,与第一个元素15交换位置:
[3, 8, 12, 26, 9, 17, 7, 25, 15, 4]
第二趟排序,找到第二小的元素4,与第二个元素8交换位置:
[3, 4, 12, 26, 9, 17, 7, 25, 15, 8]
第三趟排序,找到第三小的元素7,与第三个元素12交换位置:
[3, 4, 7, 26, 9, 17, 12, 25, 15, 8]
简单选择排序结束,得到有序序列:
[3, 4, 7, 8, 9, 12, 15, 17, 25, 26]
5. 快速排序:
以第一个元素15为基准,将序列分为两部分:
[12, 9, 7, 3, 4, 8] [26, 17, 25]
快速排序结束,得到有序序列:
[12, 9, 7, 3, 4, 8, 15, 26, 17, 25]
1.学习直接插入排序的排序思想,直接插入排序属于插入排序的一种,理解为什么插入排序算法不是全局有序的。 2.利用直接插入排序算法解决排序问题,要求输入为排序表有10个元素,其关键字序列为(9,8,7,6,5,4,3,2,1,0),输出为关键字从小到大排序的序列。
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]`,这就是按照从小到大的顺序排列的结果。
阅读全文
相关推荐















