C++简单排序——选择排序

这篇具有很好参考价值的文章主要介绍了C++简单排序——选择排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天我们来学习一种新的排序方法——选择排序。

上一次我们学习了一种简单的排序——冒泡排序。但有的人啊,他就是说:“冒泡排序太难记了!换一种!” 于是,无敌天才 我决定发一下我认为最好记的排序之一——选排。

选择排序:选出一个作为基本位置,然后再把位置的数和后面的依次比较,交换,将基本位置的数确定好,重复,直到完成排序。

文字看不懂,看看具体操作:将数列:4 9 2 8 6  从小到大排序。

第一步: 4 9 2 8 6      // 基本位置是第一位:4,开始比较。4<9,不交换。

第二步: 2 9 4 8 6      // 接下来将 4 2 比较,交换。

第三步: 2 9 4 8 6      // 将 2 8 比较,不交换。

第四步: 2 9 4 8 6      // 将 2 6 比较,不交换。

//现在完成了最小数放在最前面,用了4次比较,1次交换。

第五步: 2 4 9 8 6      // 基本位置是第二位:9,开始比较。4<9,交换。

第六步: 2 4 9 8 6      // 将 4 8 比较,不交换。

第七步: 2 4 9 8 6      // 将 4 8 比较,不交换。

//我们已经将第2小数放到第2位,用了3次比较,1次交换。

第八步: 2 4 8 9 6      // 将 9 8 比较,交换。

第九步: 2 4 6 9 8     // 将 8 6 比较,交换。

//我们已经将第3小数放到第3位,用了2次比较,2次交换。现在要将第4小数放到第4位。

第十步: 2 4 6 8 9      // 将 9 8 比较,交换。

这时,程序结束了。我们也将数列排好了。每一次的交换如下:

4 9 2 8 6

2 9 4 8 6

2 4 9 8 6

2 4 8 9 6

2 4 6 9 8

2 4 6 8 9

排序结束。

知道了基本原理,代码也就好打了(将整形的数从小到大排序):


#include <iostream>
#include <cmath>
using namespace std;

int n,i,j,a[2000];
bool t;              //定义变量

int main()
{
	cin >>n;
	for (i=1;i<=n;i++)
		cin >>a[i];       //输入

	for (i=1;i<n;i++)        //从1开始,最后一位不用比
		for (j=i+1;j<=n;j++)
			if (a[i]>a[j])        //a[i]是基本位,a[j]是当前位
				swap(a[i],a[j]);     //交换

	for (i=1;i<=n;i++)
		cout <<a[i] <<" ";        //输出

	return 0;        //华丽结束
}


选择排序时间复杂度为O(n²),比计数排序要慢,和冒泡排序一样,但没有数据类型和范围的局限(当然,范围不能太大),是一种很好记的不稳定排序。

选择排序讲解完毕,别忘了点个赞哦。

C++的发展
C++是一种通用的、高级的编程语言,它是C语言的扩展。C++由Bjarne Stroustrup于1983年首次引入,并在之后的几十年中不断发展壮大。C++被广泛应用于各种领域,包括系统开发、游戏开发、嵌入式系统、图形用户界面(GUI)开发等。

C++的设计目标
C++的设计目标是提供一种高效、灵活和可扩展的编程语言,同时保持与C语言的兼容性。它支持面向对象编程(OOP)和泛型编程,这使得开发人员能够以更高的抽象级别来组织和管理代码。

C++的特性
面向对象编程(OOP):C++是一种面向对象的编程语言,它支持类和对象的概念。类是一种用户定义的数据类型,它封装了数据和操作数据的方法。对象是类的实例,可以通过调用类的方法来访问和操作数据。C++的面向对象编程提供了封装、继承和多态等核心概念,使得代码更易于组织、理解和维护。

泛型编程:C++引入了模板(templates)的概念,使得开发人员可以编写通用的代码,可以在不同的数据类型上进行操作。模板允许开发人员定义泛型函数和类,这些函数和类可以根据实际使用的数据类型进行实例化。这提高了代码的灵活性和可重用性,使得开发人员可以编写更通用和高效的代码。

标准库:C++标准库是一组预定义的类和函数,提供了丰富的功能和数据结构。标准库包括容器(如向量、列表、映射等)、算法(如排序、搜索等)、输入输出(如文件操作、流操作等)等。使用标准库可以大大简化开发过程,提高开发效率。

内存管理:C++允许开发人员直接管理内存,包括动态分配和释放内存。开发人员可以使用关键字new来动态分配内存,并使用关键字delete来释放内存。然而,手动管理内存可能会导致内存泄漏和悬挂指针等问题。为了避免这些问题,C++还提供了智能指针(如shared_ptr和unique_ptr),它们可以自动管理内存的生命周期。

异常处理:C++支持异常处理机制,允许开发人员在程序执行过程中处理错误和异常情况。开发人员可以使用try、catch和throw关键字来捕获和处理异常。异常处理机制可以提高程序的健壮性和可靠性,使得开发人员能够更好地处理错误情况。

多线程支持:C++11引入了对多线程编程的支持。开发人员可以使用std::thread类和相关的同步原语(如互斥锁和条件变量)来创建和管理线程。多线程编程可以提高程序的并发性和性能,但也需要注意线程安全和同步的问题。

操作系统和硬件访问:C++允许开发人员直接访问底层操作系统和硬件。通过使用系统调用和特定的库函数,开发人员可以编写与操作系统和硬件交互的代码。这使得C++在系统开发和嵌入式系统等领域得到广泛应用。

第三方库和框架:C++有许多强大的第三方库和框架可供使用。这些库和框架提供了各种功能和工具,如图形用户界面(GUI)、网络编程、数据库访问等。使用第三方库和框架可以加快开发速度,减少重复工作。

高性能:C++是一种编译型语言,可以生成高效的机器码。它提供了对底层硬件的直接访问,使得开发人员能够编写高性能的代码。这使得C++在系统开发和游戏开发等对性能要求较高的领域得到广泛应用。

跨平台支持:C++可以在多个操作系统上运行,包括Windows、Linux、Mac等。这使得开发人员可以编写一次代码,然后在不同的平台上进行编译和运行,提高了开发效率。

C++的挑战
尽管C++具有许多优点,但也有一些挑战和注意事项。由于其复杂性和灵活性,C++的学习曲线较陡峭,需要花费一定的时间和精力来掌握。此外,由于C++允许直接管理内存,开发人员需要更加谨慎地处理内存相关的问题,以避免潜在的错误。

总的来说,C++是一种功能强大、灵活且高效的编程语言,适用于各种应用场景。它在计算机科学和软件工程领域有着广泛的应用,是一门值得学习和掌握的编程语言。它提供了丰富的特性和工具,使得开发人员能够编写高质量、可维护和高性能的代码。然而,由于其复杂性和灵活性,学习和掌握C++可能需要一定的时间和经验。文章来源地址https://www.toymoban.com/news/detail-462709.html

C++的发展
C++是一种通用的、高级的编程语言,它是C语言的扩展。C++由Bjarne Stroustrup于1983年首次引入,并在之后的几十年中不断发展壮大。C++被广泛应用于各种领域,包括系统开发、游戏开发、嵌入式系统、图形用户界面(GUI)开发等。

C++的设计目标
C++的设计目标是提供一种高效、灵活和可扩展的编程语言,同时保持与C语言的兼容性。它支持面向对象编程(OOP)和泛型编程,这使得开发人员能够以更高的抽象级别来组织和管理代码。

C++的特性
面向对象编程(OOP):C++是一种面向对象的编程语言,它支持类和对象的概念。类是一种用户定义的数据类型,它封装了数据和操作数据的方法。对象是类的实例,可以通过调用类的方法来访问和操作数据。C++的面向对象编程提供了封装、继承和多态等核心概念,使得代码更易于组织、理解和维护。

泛型编程:C++引入了模板(templates)的概念,使得开发人员可以编写通用的代码,可以在不同的数据类型上进行操作。模板允许开发人员定义泛型函数和类,这些函数和类可以根据实际使用的数据类型进行实例化。这提高了代码的灵活性和可重用性,使得开发人员可以编写更通用和高效的代码。

标准库:C++标准库是一组预定义的类和函数,提供了丰富的功能和数据结构。标准库包括容器(如向量、列表、映射等)、算法(如排序、搜索等)、输入输出(如文件操作、流操作等)等。使用标准库可以大大简化开发过程,提高开发效率。

内存管理:C++允许开发人员直接管理内存,包括动态分配和释放内存。开发人员可以使用关键字new来动态分配内存,并使用关键字delete来释放内存。然而,手动管理内存可能会导致内存泄漏和悬挂指针等问题。为了避免这些问题,C++还提供了智能指针(如shared_ptr和unique_ptr),它们可以自动管理内存的生命周期。

异常处理:C++支持异常处理机制,允许开发人员在程序执行过程中处理错误和异常情况。开发人员可以使用try、catch和throw关键字来捕获和处理异常。异常处理机制可以提高程序的健壮性和可靠性,使得开发人员能够更好地处理错误情况。

多线程支持:C++11引入了对多线程编程的支持。开发人员可以使用std::thread类和相关的同步原语(如互斥锁和条件变量)来创建和管理线程。多线程编程可以提高程序的并发性和性能,但也需要注意线程安全和同步的问题。

操作系统和硬件访问:C++允许开发人员直接访问底层操作系统和硬件。通过使用系统调用和特定的库函数,开发人员可以编写与操作系统和硬件交互的代码。这使得C++在系统开发和嵌入式系统等领域得到广泛应用。

第三方库和框架:C++有许多强大的第三方库和框架可供使用。这些库和框架提供了各种功能和工具,如图形用户界面(GUI)、网络编程、数据库访问等。使用第三方库和框架可以加快开发速度,减少重复工作。

高性能:C++是一种编译型语言,可以生成高效的机器码。它提供了对底层硬件的直接访问,使得开发人员能够编写高性能的代码。这使得C++在系统开发和游戏开发等对性能要求较高的领域得到广泛应用。

跨平台支持:C++可以在多个操作系统上运行,包括Windows、Linux、Mac等。这使得开发人员可以编写一次代码,然后在不同的平台上进行编译和运行,提高了开发效率。

C++的挑战
尽管C++具有许多优点,但也有一些挑战和注意事项。由于其复杂性和灵活性,C++的学习曲线较陡峭,需要花费一定的时间和精力来掌握。此外,由于C++允许直接管理内存,开发人员需要更加谨慎地处理内存相关的问题,以避免潜在的错误。

总的来说,C++是一种功能强大、灵活且高效的编程语言,适用于各种应用场景。它在计算机科学和软件工程领域有着广泛的应用,是一门值得学习和掌握的编程语言。它提供了丰富的特性和工具,使得开发人员能够编写高质量、可维护和高性能的代码。然而,由于其复杂性和灵活性,学习和掌握C++可能需要一定的时间和经验。

到了这里,关于C++简单排序——选择排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【8 排序】简单选择排序。

    顺序表: 单链表:

    2024年02月10日
    浏览(17)
  • 冒泡排序 简单选择排序 插入排序 快速排序

    bubblesort 两个for循环,从最右端开始一个一个逐渐有序 selectsort 假设是升序,两个for循环,从最左端开始一个一个逐渐有序,找到lengh-1个无序区的最小值 insertsort 两个for循环,从最左端开始一个一个逐渐有序,默认第一个就是有序区,第一个for遍历无序区,第二个for循环遍历

    2024年02月13日
    浏览(37)
  • 今天吃什么小游戏(基于Flask框架搭建的简单应用程序,用于随机选择午餐选项。代码分为两部分:Python部分和HTML模板部分)

    今天吃什么 一个简单有趣的外卖点饭网站,不知道吃什么的时候,都可以用它自动决定你要吃的,包括各种烧烤、火锅、螺蛳粉、刀削面、小笼包、麦当劳等午餐全部都在内。点击开始它会随意调出不同的午餐,点击停止就会挑选一个你准备要吃的,如果没有想吃的,你还能

    2024年01月16日
    浏览(38)
  • 【数据结构】八大排序之简单选择排序算法

    🦄 个人主页 :修修修也 🎏 所属专栏 :数据结构 ⚙️ 操作环境 : Visual Studio 2022 目录 一.简单选择排序简介及思路 二.简单选择排序的代码实现 三.简单选择排序的优化 四.简单选择排序的时间复杂度分析 结语 简单选择排序算法(Simple Selection Sort) 是一种简单直观的 选择排序算

    2024年02月01日
    浏览(64)
  • 单链表实现简单选择排序

    算法思想:顺序遍历单链表,每当访问一个结点时,查看此结点往后的结点是否有更小的值,如果有更小值的结点,则交换两个结点元素的值(无需改变指针的指向)。每遍历一个结点就执行上诉操作,直到遍历到最后一个结点。 核心代码: 完整代码: 程序运行结果:  

    2024年02月11日
    浏览(23)
  • 归并交换基数简单选择排序

    基本思想就是:两两进行比较,如果发生逆序则进行交换,直到所有的记录都排好为止。 常见的交换排序方法: 冒泡排序 O ( n 2 ) O(n^2) O ( n 2 ) 快速排序 O ( n l o g 2 n ) O(nlog_2n) O ( n l o g 2 ​ n ) 冒泡排序就是基于简单的交换思想。每趟不断将记录两两比较,并按前小后大规则交

    2024年02月15日
    浏览(31)
  • 算法笔记【6】-简单选择排序算法

    在排序算法中,简单选择排序是一种基本且直观的排序方法。尽管它的性能较冒泡排序稍好,但仍然属于较慢的排序算法。本文将详细介绍简单选择排序算法的原理、步骤,并讨论其优缺点。 简单选择排序是一种寻找最小值的有效策略,通过不断选择剩余元素中的最小值,并

    2024年02月07日
    浏览(25)
  • 简单选择排序——C语言实现

    选择排序思想:若按照递增顺序对顺序表进行排列,在n个元素的顺序表中,从第i(i=1)个元素开始遍历到第n-1个元素,在遍历过程中都将第i个元素依次与第i+1到第n个元素进行比较,确定最小的元素,如果最小的元素不是第i个元素则将其与最小的元素进行交换。 代码如下:

    2024年02月11日
    浏览(24)
  • 用C语言进行学生成绩排序(简单选择排序和堆排序)

    选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1 (i=1,2…,n-1) 个待排序元素中选取最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是历年考查的重点。 根据上面选择排序的思想,可以很直观

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包