C++插入排序的实现

简介: C++插入排序的实现

插入排序(Insertion Sort)是一种简单且直观的排序算法,其基本原理是将未排序的元素逐个插入到已排序部分的合适位置,直到整个数组排序完成。

 

以下是插入排序的基本原理:

1. 从第二个元素开始(将第一个元素视为已排序部分),将当前元素插入到已排序部分的合适位置。

2. 每次将一个未排序的元素插入到已排序部分,直到所有元素都被插入完成。

 

插入排序的特点:

- 插入排序是一种稳定的排序算法,相同元素的相对位置不会改变。

- 时间复杂度为 O(n^2),其中 n 是待排序数组的元素个数。在最坏情况下,即数组逆序时,插入排序的时间复杂度最高。

- 插入排序是一种原地排序算法,只需要常数级别的额外空间。

 

尽管插入排序的时间复杂度较高,但对于小规模数据或是接近有序的数据,插入排序通常表现良好。在实际应用中,插入排序常常用作其他高级排序算法的优化手段,例如快速排序的优化部分。

 

如果需要更多关于插入排序的信息或示例代码,请随时告诉我。

以下是用 C++ 实现插入排序的示例代码:

```cpp
#include <iostream>
 
void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int 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--;
        }
        arr[j + 1] = key;
    }
}
 
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}
 
int main() {
    int arr[] = {12, 11, 13, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
 
    std::cout << "Original array: ";
    printArray(arr, n);
 
    insertionSort(arr, n);
 
    std::cout << "Sorted array: ";
    printArray(arr, n);
 
    return 0;
}
```

 

在这段代码中,`insertionSort` 函数实现了插入排序算法,`printArray` 函数用于打印数组的元素,`main` 函数中定义了一个整型数组并对其进行插入排序

相关文章
|
6月前
|
算法 搜索推荐 C++
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
|
存储 人工智能 搜索推荐
【八大数据排序法】插入排序法的图形理解和案例实现 | C++
排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。
107 0
【八大数据排序法】插入排序法的图形理解和案例实现 | C++
|
算法 C++
|
人工智能 Linux C++
比较C++和C实现直接插入排序和二分插入排序效率
 比较C++和C实现直接插入排序和二分插入排序效率! 注:之前没有发现这其实是两个不同算法,现在更正下。 下面用C++实现二分插入排序和C实现直接插入排序,明天会继续测试下C++实现直接插入排序和C实现二分插入排序 下面是几次的输出结果:(C)Total seconds time taken by CPU: 119.
987 0
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
25 4
|
30天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4