文章目录

  • 一、选择排序的概述
  • 二、选择排序算法代码详解
    • (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语言排序算法之选择排序相关推荐

  1. 堆排序算法c语言筛选法,【排序】排序算法之选择排序

    排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...

  2. 【排序算法】选择排序(C语言)

    [排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ​ ...

  3. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  4. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  5. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  6. 【排序算法】选择排序(Selection sort)

    选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...

  7. 排序算法(3)选择排序

    排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...

  8. Java经典排序算法:选择排序,动图演示排序过程

    Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...

  9. 选择排序算法流程图_常用排序算法之选择排序

    前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...

最新文章

  1. vc++中几个常用的数学函数
  2. 0. 正规鞅的混沌及可料表示
  3. 大容量磁盘分区表、文件系统、分区工具的选择
  4. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
  5. oracle数据库建表视频,Oracle数据库的创建表全
  6. war,jar包是啥
  7. Windows7与Window2008 64位IIS7上面DCOM配置Excel、Word
  8. 【Flink】报错 KryoException ConcurrentModificationException StackOverflowError
  9. Leetcode每日一题:面试题17.12 binode
  10. php原生数据库分页
  11. Web开发编程语言是最适合新手的吗-开课吧
  12. 项目积压需求项目计划_物料需求-计划的方案.ppt
  13. 克利夫顿优势识别器 Clifton Strengths
  14. 关于惠普笔记本电脑电源已连接但显示未充电的解决办法
  15. windows注册表操作——备份,还原注册表,清除注册表卸载残留信息
  16. 各大IT/IC公司offer比较
  17. 运算电路的基本定义和运算电路经典基本电路图
  18. Domoticz-Dummy(虚拟传感器)
  19. go编译库给c语言map参数,在 Go 中使用 C 语言的动态库
  20. 股票每日复盘都应该做什么,需要从哪些方面复盘?

热门文章

  1. QMap与Json相互转换
  2. Android 获取屏幕宽度和高度的几种方法
  3. opencv中的RGB改变通道的数值,而对整张图的影响
  4. 测试右移:是什么,为什么,怎么办。
  5. 用python个给maya写了个重命名插件
  6. 百度经纬度坐标转换官方方法
  7. 女生做UI设计师累吗?UI设计难吗?
  8. linux 修改 gid uid,uid, gid, setuid, setgid
  9. 微软Azure区块链开发工具包三大功能详解
  10. [iOS]根据UIColor获取及改变RGB和Alpha