C++选择排序的实现

简介: C++选择排序的实现

选择排序(Selection Sort)是一种简单直观的排序算法,它的基本原理是每次从待排序的元素中选择最小(或最大)的元素,放到已排序部分的末尾,直到所有元素都排序完成。

 

以下是选择排序的基本原理:

1. 遍历待排序数组,找到数组中最小的元素,并将其与数组的第一个元素交换位置。

2. 接着,在剩下的元素中找到最小的元素,将其与数组的第二个元素交换位置。

3. 重复以上步骤,每次在剩余未排序的部分中选择最小的元素,放到已排序部分的末尾,直到整个数组排序完成。

 

选择排序的特点:

- 选择排序是一种不稳定的排序算法,因为在选择最小元素的过程中可能会破坏相同元素的相对位置。

- 时间复杂度为 O(n^2),其中 n 是待排序数组的元素个数。无论数组的初始状态如何,选择排序的时间复杂度都是一样的。

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

 

虽然选择排序的时间复杂度较高,但由于其实现简单,适合用于对于小规模数据的排序。在实际应用中,选择排序通常不是首选,而是像快速排序、归并排序等更高效的排序算法更常见。以下是用 C++ 实现选择排序的示例代码:

 

```cpp
#include <iostream>
 
void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // Swap the found minimum element with the first element
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}
 
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[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    std::cout << "Original array: ";
    printArray(arr, n);
    
    selectionSort(arr, n);
    
    std::cout << "Sorted array: ";
    printArray(arr, n);
    
    return 0;
}
```

 

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

相关文章
|
1月前
|
Python C++ Java
C/C++每日一练(20230407) 选择排序法、多数元素、字母异位词分组
C/C++每日一练(20230407) 选择排序法、多数元素、字母异位词分组
44 0
C/C++每日一练(20230407) 选择排序法、多数元素、字母异位词分组
|
存储 人工智能 搜索推荐
【八大数据排序法】选择排序法的图形理解和案例实现 | C++
排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。
81 0
|
算法 搜索推荐 C语言
【C++】选择排序
【C++】选择排序
【C++】选择排序
|
1天前
|
C++
【C++】日期类Date(详解)②
- `-=`通过复用`+=`实现,`Date operator-(int day)`则通过创建副本并调用`-=`。 - 前置`++`和后置`++`同样使用重载,类似地,前置`--`和后置`--`也复用了`+=`和`-=1`。 - 比较运算符重载如`&gt;`, `==`, `&lt;`, `&lt;=`, `!=`,通常只需实现两个,其他可通过复合逻辑得出。 - `Date`减`Date`返回天数,通过迭代较小日期直到与较大日期相等,记录步数和符号。 ``` 这是236个字符的摘要,符合240字符以内的要求,涵盖了日期类中运算符重载的主要实现。
|
3天前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
5 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
1天前
|
存储 编译器 C++
【C++】类和对象④(再谈构造函数:初始化列表,隐式类型转换,缺省值
C++中的隐式类型转换在变量赋值和函数调用中常见,如`double`转`int`。取引用时,须用`const`以防修改临时变量,如`const int& b = a;`。类可以有隐式单参构造,使`A aa2 = 1;`合法,但`explicit`关键字可阻止这种转换。C++11起,成员变量可设默认值,如`int _b1 = 1;`。博客探讨构造函数、初始化列表及编译器优化,关注更多C++特性。
|
1天前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
1天前
|
C语言 C++
【C++】日期类Date(详解)③
该文介绍了C++中直接相减法计算两个日期之间差值的方法,包括确定max和min、按年计算天数、日期矫正及计算差值。同时,文章讲解了const成员函数,用于不修改类成员的函数,并给出了`GetMonthDay`和`CheckDate`的const版本。此外,讨论了流插入和流提取的重载,需在类外部定义以符合内置类型输入输出习惯,并介绍了友元机制,允许非成员函数访问类的私有成员。全文旨在深化对运算符重载、const成员和流操作的理解。
|
1天前
|
定位技术 C语言 C++
C++】日期类Date(详解)①
这篇教程讲解了如何使用C++实现一个日期类`Date`,涵盖操作符重载、拷贝构造、赋值运算符及友元函数。类包含年、月、日私有成员,提供合法性检查、获取某月天数、日期加减运算、比较运算符等功能。示例代码包括`GetMonthDay`、`CheckDate`、构造函数、拷贝构造函数、赋值运算符和相关运算符重载的实现。