当前位置:首页算法 > 正文

数据演示插入排序过程

作者:野牛程序员:2023-03-06 16:58:09算法阅读 2116

在插入排序算法中,我们需要将未排序部分的元素逐个插入到已排序部分的适当位置。具体来说,对于第 i 个未排序元素,我们需要将其与已排序部分的元素从右到左逐个比较,找到其在已排序部分中的正确位置。


我将使用以下数据来演示插入排序算法的排序过程:

10 7 1 3 8 9

首先,我们将第一个元素 10 视为已排序数组,将剩余的元素视为未排序数组。接下来,我们将第二个元素 7 与已排序数组中的元素进行比较:

10 7 1 3 8 9

因为 7 小于 10,所以我们将 7 插入到已排序数组的前面:

7 10 1 3 8 9

接下来,我们将第三个元素 1 插入到已排序数组中的正确位置。

我们需要将 1 与已排序数组中的每个元素逐个比较,找到它应该插入的位置。首先,我们将 1 与 10 进行比较,因为 1 小于 10,所以我们继续将 1 与 7 进行比较。因为 1 小于 7,所以我们将 1 插入到 7 的前面:

1 7 10 3 8 9

接下来,我们将第四个元素 3 插入到已排序数组中的正确位置。我们需要将 3 与已排序数组中的每个元素逐个比较,找到它应该插入的位置。首先,我们将 3 与 10 进行比较,因为 3 小于 10,所以我们继续将 3 与 7 进行比较。因为 3 小于 7,所以我们将 3 插入到 7 的前面:

1 3 7 10 8 9

接下来,我们将第五个元素 8 插入到已排序数组中的正确位置。我们需要将 8 与已排序数组中的每个元素逐个比较,找到它应该插入的位置。首先,我们将 8 与 10 进行比较,因为 8 小于 10,所以我们继续将 8 与 7 进行比较。因为 8 大于 7,所以我们将 8 插入到 7 的后面:

1 3 7 8 10 9

最后,我们将第六个元素 9 插入到已排序数组中的正确位置。我们需要将 9 与已排序数组中的每个元素逐个比较,找到它应该插入的位置。首先,我们将 9 与 10 进行比较,因为 9 小于 10,所以我们继续将 9 与 8 进行比较。因为 9 大于 8,所以我们将 9 插入到 8 的后面:

1 3 7 8 9 10

因此,最终的排序结果为:

1 3 7 8 9 10
#include <iostream>
using namespace std;

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;

        for (; j >= 0 && arr[j] > key; j--)
            arr[j + 1] = arr[j];

        arr[j + 1] = key;
    }
}

void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}

int main() {
    int arr[] = { 12, 11, 13, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "Original array: ";
    printArray(arr, n);

    insertionSort(arr, n);

    cout << "Sorted array: ";
    printArray(arr, n);

    return 0;
}

输出:

Original array: 12 11 13 5 6 
Sorted array: 5 6 11 12 13


#include <iostream>
using namespace std;

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;
    }
}

void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}

int main() {
    int arr[] = { 12, 11, 13, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "Original array: ";
    printArray(arr, n);

    insertionSort(arr, n);

    cout << "Sorted array: ";
    printArray(arr, n);

    return 0;
}

在上面的示例中,insertionSort() 函数是用来实现插入排序算法的。该函数接受一个整数数组和该数组的大小作为参数,并在原地对数组进行排序。printArray() 函数用于打印数组。

插入排序算法的基本思想是将数组分为已排序和未排序两部分,每次将未排序部分中的一个元素插入到已排序部分的正确位置。在上面的示例中,我们使用了一个 while 循环来找到插入元素的正确位置,然后将数组中的元素后移以腾出插入元素的位置。最后,将插入元素插入到正确的位置。

以下是一个简单的示例,展示了如何使用 while 循环来实现元素后移的操作:

int i, j;
int n = 5;
int arr[n] = {5, 3, 8, 2, 7};

// 从第二个元素开始遍历未排序的元素
for (i = 1; i < n; i++) {
    int temp = arr[i];
    j = i - 1;

    // 将比当前元素大的元素向后移动一位
    while (j >= 0 && arr[j] > temp) {
        arr[j + 1] = arr[j];
        j--;
    }

    // 将当前元素插入到正确的位置
    arr[j + 1] = temp;
}

在上面的代码中,我们使用 for 循环来遍历未排序的元素,并使用 while 循环将比当前元素大的元素向后移动一位。在 while 循环中,我们首先检查 j 是否大于等于 0,并且已排序数组中的当前元素是否大于 temp(即当前未排序元素的值)。如果是,则将 arr[j] 向右移动一位,并将 j 减 1。如果不是,则退出 while 循环。

在 while 循环完成后,我们将当前未排序元素 temp 插入到正确的位置(即 j+1 的位置)。这个位置是在 while 循环中找到的,它是第一个比 temp 小的已排序元素的位置加 1。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击