C语言中的插入排序

下面是一个在C语言中实现插入排序算法的例子:

 

``

#include

 

void insertionSort(int arr[], int n) {

    int i, key, j;

    for (i = 1; i < n; i++) {

        key = arr[i];

        j = i - 1;

 

        /* Move elements of arr[0..i-1], that are

           greater than key, to one position ahead

           of their current position */

        while (j >= 0 && arr[j] > key) {

            arr[j + 1] = arr[j];

            j = j - 1;

        }

        arr[j + 1] = key;

    }

}

 

void printArray(int arr[], int n) {

    for (int i = 0; i < n; i++) {

        printf("%d ", arr[i]);

    }

    printf("\n");

}

 

int main() {

    int arr[] = {64, 34, 25, 12, 22, 11, 90};

    int n = sizeof(arr) / sizeof(arr[0]);

 

    printf("Original array: ");

    printArray(arr, n);

 

    insertionSort(arr, n);

 

    printf("Sorted array: ");

    printArray(arr, n);

 

    return 0;

}

```

 

在这段代码中,‘insertionSort’函数实现了插入排序算法。它从第二个元素开始遍历数组,并将每个元素插入已排序元素中的正确位置。函数的作用是打印数组中的元素。

 

在‘main’函数中,我们定义了一个包含一些值的数组‘arr’,计算数组‘n’的大小,然后调用‘insertionSort’函数对数组进行排序。最后,我们使用“printArray”函数打印原始和排序后的数组。

 

输出结果将是:

 

Original array: 64 34 25 12 22 11 90

Sorted array: 11 12 22 25 34 64 90

 

插入排序算法在最坏情况下的时间复杂度为O(n^2),但它在小数组或部分排序的数组上表现良好。

 

以下是插入排序算法的分步说明:

 

1. 从数组中的第二个元素(键)开始。假设第一个元素已经排序。

 

2. 将密钥与之前的元素进行比较。将大于键的元素向右移动,为插入键创建一个空间。

 

3. 重复第 2 步,直到找到键的正确位置或到达数组的开头。

 

4. 将钥匙插入排序顺序中的正确位置。

 

5. 对数组中的其余元素重复步骤 1-4,一次一个元素,直到对整个数组进行排序。

 

下面是一个示例,用于说明使用数组 [5, 2, 4, 6, 1, 3] 的插入排序算法:

 

1. 从第二个元素开始,即 2。将其与之前的元素 (5) 进行比较。由于 5 大于 2,我们将 5 向右移动。

 

数组:[2, 5, 4, 6, 1, 3]

 

2. 将键 (2) 与它之前的下一个元素 (4) 进行比较。由于 4 大于 2,我们将 4 向右移动。

 

数组:[2, 4, 5, 6, 1, 3]

 

3. 将键 (2) 与它之前的下一个元素 (5) 进行比较。由于 5 大于 2,我们将 5 向右移动。

 

数组:[2, 4, 5, 6, 1, 3]

 

4. 将键 (2) 与它之前的下一个元素 (6) 进行比较。由于 6 大于 2,我们将 6 向右移动。

 

数组:[2, 4, 5, 6, 1, 3]

 

5. 将键 (2) 与它之前的下一个元素 (1) 进行比较。由于 1 小于 2,我们将键 (2) 插入其正确位置。

 

数组:[1, 2, 4, 5, 6, 3]

 

6. 移动到下一个键,即 4。将其与之前的元素 (2) 进行比较。由于 2 小于 4,我们将键 (4) 插入其正确位置。

 

数组:[1, 2, 4, 5, 6, 3]

 

7. 对其余元素重复该过程,直到整个数组排序完毕。

 

数组:[1, 2, 3, 4, 5, 6]

 

在每次迭代中,数组的排序部分按一个元素扩展,未排序部分按一个元素收缩。此过程一直持续到对整个数组进行排序。

 

 

你可能感兴趣的:(C语言专栏,数据结构,算法,c语言,开发语言,排序算法)