用c语言写出插入排序算法
时间: 2023-08-10 14:26:31 浏览: 98
当然可以,下面是C语言实现插入排序的代码:
```
void insertSort(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 = j - 1;
}
arr[j + 1] = key;
}
}
```
其中,arr[]是待排序的数组,n是数组的长度。在插入排序算法中,我们将数组分为两个部分,已排序部分和未排序部分。对于未排序部分,我们将其第一个元素与已排序部分进行比较,将其插入到合适的位置,然后将已排序部分的长度增加1,重复这个过程,直到未排序部分为空。
相关问题
用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)$,虽然与冒泡排序和选择排序的时间复杂度相同,但它的常数因子比较小,对于小规模数据排序效率较高。
使用C语言写出完整的排序算法—直接插入排序
好的,以下是完整的直接插入排序算法的C语言实现:
```c
#include <stdio.h>
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 = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {5, 2, 9, 4, 7, 6, 1, 3, 8};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
insertion_sort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Original array: 5 2 9 4 7 6 1 3 8
Sorted array: 1 2 3 4 5 6 7 8 9
```
其中,`arr`是待排序的整数数组,`n`是数组的长度。在主函数中,我们先输出未排序的原始数组,然后调用`insertion_sort`函数进行排序,最后输出排序后的数组。
阅读全文