当前位置:网站首页>选择排序—直接选择排序和堆排序
选择排序—直接选择排序和堆排序
2022-08-01 06:36:00 【Fan~Fan】
目录
一、直接选择排序
基本思想:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。动态演示:实现思路:
选择排序的实现比较简单,其就是依次遍历数组,找出最小或者最大的元素与最前面或者最后面元素进行交换,然后遍历剩下的数据,再找再换,直到遍历完毕。
排序优化:
对于传统选择排序,我们每次只找最大或者最小的进行排序,这样有点浪费时间,为了提高效率,我们可以每次选出最大的和最小的,最小的放前面,最大的放后面,不断缩小区间,直到完成排序。
存在缺陷:
提高了效率的同时也可能会带来风险,比如我们要对数组arr[5]={9,1,2,5,7}进行排序。
第一次遍历我们得到最大元素为a[0],最小元素为a[1],最小元素要放在最左边,所以a[0]与a[1]进行交换,此时a[0]位置放的是元素1,为最小元素符合排序。但此时最大元素要放在最右边,最大元素为9,我们记录的是a[0]位置,但此时a[0]位置元素已不是9,所以这就导致排序失败,出现这种重叠情况,我们需要修正下max。
代码演示:
void Swap(int* pa, int* pb) { int tmp = *pa; *pa = *pb; *pb = tmp; } //直接选择排序 void SelectSort(int* a, int n) { int left = 0; int right = n - 1; while (left < right) { int mini = left, maxi = left; for (int i = left + 1; i <= right; i++) { if (a[i] < a[mini]) { mini = i;//遍历数组找出最小值下标 } if (a[i] > a[maxi]) { maxi = i;//遍历数组找出最大值下标 } } //升序小值放左,大值放右 Swap(&a[left], &a[mini]); //如果left和maxi重叠,修正maxi if (left == maxi) { maxi = mini; } Swap(&a[right], &a[maxi]); //交换完缩小区间 left++; right--; } }
直接选择排序特性总结:
:直接选择排序的思想非常好理解,但因为其效率不高所以在实际中很少用。
:时间复杂度:O(N^2)
:空间复杂度:O(1)
:稳定性:不稳定
二、堆排序
关于堆排序的讲解在下面的博文中讲的很清楚:
边栏推荐
- mysql中添加字段的相关问题
- 零代码网站开发利器:WordPress
- datagrip 报错 “The specified database userpassword combination is rejected...”的解决方法
- 奇葩问题 npm install 报错 gyp ERR
- MVVM project development (commodity management system 1)
- Windows taskbar icon abnormal solution
- Dell PowerEdge Server R450 RAID Configuration Steps
- LeetCode 0150. Reverse Polish Expression Evaluation
- Solve the problem of page flicker caused by browser scroll bars
- Selenium: Dropdown Box Actions
猜你喜欢

MVVM project development (commodity management system 1)

爬虫框架 Scrapy 详解

测试工具(四)Jenkins环境搭建与使用

Dart 异常详解

Datagrip error "The specified database userpassword combination is rejected..."Solutions

安装SQL Server详细教程
![Explosive 30,000 words, the hardest core丨Mysql knowledge system, complete collection of commands [recommended collection]](/img/7f/08b323ffc5b5f8e3354bee6775b994.png)
Explosive 30,000 words, the hardest core丨Mysql knowledge system, complete collection of commands [recommended collection]

WebSocket实现聊天功能

点餐系统数据库设计--SQL Server

mysql的行锁和间隙锁
随机推荐
湖仓一体电商项目(一):项目背景和架构介绍
字符中的第一个唯一字符
小白的0基础教程SQL: 关系数据库概述 02
轻量级的VsCode为何越用越大?为什么吃了我C盘10G?如何无痛清理VsCode缓存?手把手教你为C盘瘦身
MySQL row locks and gap locks
微信小程序获取手机号phonenumber.getPhoneNumber接口开发
实战演练 Navicat 中英文模式切换
matlab wind speed model wavelet filtering
戴尔PowerEdge服务器R450 RAID配置步骤
小白的0基础教程SQL: 安装MYSQL 03
从零开始—仿牛客网讨论社区项目(一)
数据机构----线性表之单向链表
Srping中bean的生命周期
05-SDRAM: Arbitration
对于升级go1.18的goland问题
爬虫基本原理介绍、实现以及问题解决
Dialogue with the father of MySQL: One excellent programmer is worth 5 ordinary programmers
Selenium: upload and download files
Selenium: Dropdown Box Actions
Detailed explanation of the crawler framework Scrapy
