使用C语言编写代码利用直接插入排序算法实现线性表的排序。要求输出第k趟排序的结果。例如原来线性表为:26,12,25,4,36,15,21,第一趟直接排序排序结果为: 12, 26,25,4,36,15,21,第二趟直接插入排序结果为: 12,25, 26,4,36,15,21。 输入 第一个为元素个数n(1<=n<=1000),第二行为n个元素值(整数),即需要排序的元素个数,第三行为k(1<=k<=n-1),即要求的第k趟排序结果。 输出 对每一测试用例,用一行输出第k趟排序结果,用空格隔开。 样例输入 5 2 4 1 9 7 3 样例输出 1 2 4 9 7
时间: 2023-08-02 15:05:40 浏览: 87
以下是使用 C 语言编写的直接插入排序算法实现线性表的排序,并输出第 k 趟排序的结果的代码。注意,这里的第 k 趟排序是指在进行 k 轮插入排序后的结果。
```
#include <stdio.h>
void straightInsertionSort(int arr[], int n, int k);
int main() {
int n, k, arr[1000];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
scanf("%d", &k);
straightInsertionSort(arr, n, k);
return 0;
}
void straightInsertionSort(int arr[], int n, int k) {
for (int i = 1; i < n; i++) {
int temp = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
if (i == k) {
for (int l = 0; l < n; l++) {
printf("%d ", arr[l]);
}
printf("\n");
}
}
}
```
代码思路:
1. 定义一个函数 `straightInsertionSort`,该函数接收三个参数:排序的数组 `arr`、数组中元素的个数 `n` 和要输出的第 k 趟排序的结果 `k`。
2. 在 `straightInsertionSort` 函数中,使用 `for` 循环遍历数组,从数组的第二个元素开始插入排序。
3. 定义变量 `temp` 用于存放当前需要排序的元素,定义变量 `j` 表示已排序部分的最后一个元素的下标。
4. 在 `while` 循环中,从已排序部分的最后一个元素开始依次比较,如果已排序部分的元素比当前元素大,则将已排序部分的元素往后移动一位。
5. 将当前元素插入到已排序部分的正确位置。
6. 如果当前轮数等于要输出的第 k 趟排序结果的轮数,则输出当前数组的元素。
7. 在 `main` 函数中,先读入需要排序的数组和要输出的第 k 趟排序结果的轮数,然后调用 `straightInsertionSort` 函数进行排序并输出结果。
注意:这里的直接插入排序算法是从小到大排序。如果需要从大到小排序,只需将 `while` 循环中的比较符号改为 `>` 即可。
阅读全文