用C语言写出直接插入排序并输入数据,输出每一趟的结果
时间: 2023-12-14 14:34:51 浏览: 108
以下是用C语言实现直接插入排序并输出每一趟结果的代码:
```c
#include <stdio.h>
void insertionSort(int arr[], int n) {
int i, key, j;
for (i = 1; i < n i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
// 输出每一趟排序结果
printf("第%d趟排序结果:", i);
for (int k = 0; k < n; k++) {
printf("%d ", arr[k]);
}
printf("\n");
}
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
insertionSort(arr, n);
return 0;
}
```
相关问题
用c语言实现,对待排序序列使用直接插入排序算法进行排序,输出每一趟排序后的结果
好的,我可以帮你解决这个问题。
以下是使用C语言实现直接插入排序算法的代码,包括输出每一趟排序后的结果:
```c
#include <stdio.h>
void insertionSort(int arr[], int n) {
int i, key, j;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
// 输出每一趟排序后的结果
printf("第%d趟排序后的结果:", i);
for (int k = 0; k < n; k++) {
printf("%d ", arr[k]);
}
printf("\n");
}
}
int main() {
int arr[] = {5, 2, 4, 6, 1, 3};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
return 0;
}
```
这个程序会输出每一趟排序后的结果,例如:
```
第1趟排序后的结果:2 5 4 6 1 3
第2趟排序后的结果:2 4 5 6 1 3
第3趟排序后的结果:2 4 5 6 1 3
第4趟排序后的结果:1 2 4 5 6 3
第5趟排序后的结果:1 2 3 4 5 6
```
希望这个程序能够帮到你!
用C语言写出插入排序算法,并对每一行算法解释
当然,下面是用C语言写的插入排序算法及其解释:
```c
void insertion_sort(int arr[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
```
插入排序算法也是一种简单的排序算法,它的基本思想是将一个元素插入到已排序序列中的合适位置,以此来扩大已排序序列的长度,直到整个序列有序为止。以下是对上述代码的解释:
- `void insertion_sort(int arr[], int n)`:定义一个名为`insertion_sort`的函数,它接受一个整数数组`arr`和数组长度`n`作为参数,函数返回值为空。
- `int i, j, key;`:定义三个整型变量`i`、`j`和`key`,其中`i`表示当前元素的索引,`j`表示已排序序列中待插入元素的位置,`key`表示待插入元素的值。
- `for (i = 1; i < n; i++)`:外层循环,遍历序列中的所有元素,它的初始值为1,最大值为`n-1`,每次循环结束后`i`的值加1。
- `key = arr[i]; j = i - 1;`:将当前元素的值`arr[i]`赋给`key`,并将已排序序列的最后一个元素的索引赋给`j`。
- `while (j >= 0 && arr[j] > key)`:内层循环,将待插入元素`key`与已排序序列中的所有元素进行比较,它的初始值为`i-1`,每次循环结束后`j`的值减1。
- `arr[j + 1] = arr[j]; j--;`:将已排序序列中大于`key`的元素往后移,为插入`key`腾出位置。
- `arr[j + 1] = key;`:将`key`插入到已排序序列中的合适位置。
最终,当外层循环结束后,整个序列就会有序。插入排序的时间复杂度为$O(n^2)$,虽然与冒泡排序和选择排序的时间复杂度相同,但它的常数因子比较小,对于小规模数据排序效率较高。