C语言排序算法之选择排序
文章目录
- 一、选择排序的概述
- 二、选择排序算法代码详解
- (1)算法分析
- (2)选择排序算法代码详解
- 三、总代码
一、选择排序的概述
选择排序(Selection sort)是一种简单直观的排序算法。
它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
二、选择排序算法代码详解
(1)算法分析
选择排序简单来说就是在开头选一个数作为最小值(或者是最大值),然后通过该最小值与它后面的数进行比较,直到找到他们之间的最小值,如果找到的最小值不是原来的最小值,那么就将它们进行交换,直到将所有的数排序完。
下面是原数组为5 1 3 2
首先我们将最小值设置为下标为0的数字5,然后将5与它后面的数比较,首先是5与下标为1的数字1比较
很明显1<5,所以这时最小值下标设置为1,
但是注意了这时并没有交换数字,而是继续比较,
将最小值下标为1的数字1与后面下标为2的数字3进行比较,
1<3,这时最小值下标还是1,
继续将最小值下标为1的数字1与后面下标为3的数字2进行比较,
1<2,这时最小值下标还是1,
比较完一轮后,
将新的最小值下标1与刚开始设置的最小值下标0进行比较,
我们发现它们并不相等,
所以我们需要将他们进行互换,把最小值放在前面。
如此反复就完成了选择排序。
(2)选择排序算法代码详解
代码如下:
void selectSort( int data[] ,int n )
{/*----begin------*/int min;//定义一个变量来储存最小值下标for(int i=0;i<n-1;i++)//外循环控制比较次数,有n个数就比较n-1次{min=i;// 假设最小值是data[i],即data[0]for(int j=i+1;j<n;j++)//用最小值跟最小值后面的数data[i+1]~data[n-1]比较{//在这些数中通过与制定的最小值data[min]比较找到最小值if(data[j]<data[min]){//如果有比最小值还小的min=j;//记录下最小值的下标}}//退出内循环,判断是否有比最小值还小的//如果有就交换if(data[i]!=data[min]){//这是没有借用第三方变量交换的方式data[i]=data[min]+data[i];data[min]=data[i]-data[min];data[i]=data[i]-data[min];}}/*-----end------*/
}
三、总代码
#include <stdio.h>
#include <stdlib.h>//选择排序函数
void selectSort( int data[] ,int n )
{/*----begin------*/int min;//定义一个变量来储存最小值下标for(int i=0;i<n-1;i++)//外循环控制比较次数,有n个数就比较n-1次{min=i;// 假设最小值是data[i],即data[0]for(int j=i+1;j<n;j++)//用最小值跟最小值后面的数data[i+1]~data[n-1]比较{//在这些数中通过与制定的最小值data[min]比较找到最小值if(data[j]<data[min]){//如果有比最小值还小的min=j;//记录下最小值的下标}}//退出内循环,判断是否有比最小值还小的//如果有就交换if(data[i]!=data[min]){//这是没有借用第三方变量交换的方式data[i]=data[min]+data[i];data[min]=data[i]-data[min];data[i]=data[i]-data[min];}}/*-----end------*/
}//输出数组元素
void print(int data[] ,int n)
{for(int i=0;i<n;i++)printf("%d ",data[i]);printf("\n");
}
//主函数
int main()
{int data[]={5,1,3,2};print(data,4);//输出原数组selectSort(data,4);//调用选择排序函数print(data,4);//输出排序后的数组return 0;
}
下面是运行后的图
上面那串数字的是原数组
下面那串数字是进行选择排序后的数组
然后就结束了。
C语言排序算法之选择排序相关推荐
- 堆排序算法c语言筛选法,【排序】排序算法之选择排序
排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...
- 【排序算法】选择排序(C语言)
[排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- 排序算法(3)选择排序
排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...
- Java经典排序算法:选择排序,动图演示排序过程
Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...
- 选择排序算法流程图_常用排序算法之选择排序
前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...
最新文章
- vc++中几个常用的数学函数
- 0. 正规鞅的混沌及可料表示
- 大容量磁盘分区表、文件系统、分区工具的选择
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
- oracle数据库建表视频,Oracle数据库的创建表全
- war,jar包是啥
- Windows7与Window2008 64位IIS7上面DCOM配置Excel、Word
- 【Flink】报错 KryoException ConcurrentModificationException StackOverflowError
- Leetcode每日一题:面试题17.12 binode
- php原生数据库分页
- Web开发编程语言是最适合新手的吗-开课吧
- 项目积压需求项目计划_物料需求-计划的方案.ppt
- 克利夫顿优势识别器 Clifton Strengths
- 关于惠普笔记本电脑电源已连接但显示未充电的解决办法
- windows注册表操作——备份,还原注册表,清除注册表卸载残留信息
- 各大IT/IC公司offer比较
- 运算电路的基本定义和运算电路经典基本电路图
- Domoticz-Dummy(虚拟传感器)
- go编译库给c语言map参数,在 Go 中使用 C 语言的动态库
- 股票每日复盘都应该做什么,需要从哪些方面复盘?