C语言学习之选择排序
上一篇文章中讲C语言排序中的比较常见的(交换)冒泡排序,那么这篇文章也将以新手个人的经历来讲同样比较常见而实用的数组排序之选择排序。
选择排序,从字面上看是通过选择来进行排序。其实它的用法就是通过选择来进行排序的,我就以从小到大为例。设定一个临时的变量用来储存当前的最小值,如对第一位上该放置最小的数值,那么我要将第一位上的数值与后面位上的数进行值的比较,如果有比较的值比该数值小时则通过temp这个临时变量进行两值的交换,然后继续将交换后的值与剩下的数进行比较,如还有更小的值则继续交换值,否则不交换。这样依次比较到最后一位时就把第一位上该放置的数值找出来了,后面第二位、第四位......同理的操作。
我还是以 4 6 32 5 12 2 15 28 9 10 这10个数为例进行选择排序,过程如下图
(方框中的数值则表示当前要排序位置上的数值)

代码如下:
#include"stdio.h"
//传统交换法
int main(void)
{
int i, j;
int temp, min;
int a[] = {, , , , , , , , , };
for(j = ; j < ; j ++){
for(i = j + ; i < ; i ++){//从要进行排序位上的数值开始 与后面的数值依次进行比较
//如有比其值小的则进行值的交换 然后继续比较下去 若还有值比其小的继续进行值的交换
//否则不进行
if(a[j] > a[i]){
temp = a[i];
a[i] = a[j];//通过临时变量进行值的交换操作
a[j] = temp;
}
}
}
for(i = ; i < ; i ++)//打印输出
printf("%d ", a[i]);
}
由上图和代码,可以看出这个数值交换有点频繁,想要一次完成怎么办呢,那么就要进行优化了。就像下面这样的思路,运用擂台法从数组中直接找出符合条件的值然后进行值的交换,一次就搞定了。

代码如下:
#include"stdio.h"
//交换法
int main(void)
{
int i, j;
int temp, min;
int a[] = {, , , , , , , , , };
for(j = ; j < ; j ++){
for(i = j; i < ; i ++){
min = a[j];//采用擂台法找出最小值 首先假定要排序的数位上的值为最小值 然后找出最小值
if(a[i] < min){
temp = a[i];
a[i] = min;
min = temp;
}
a[j] = min;//将最小的值与该位进行交换
}
}
for(i = ; i < ; i ++)//打印输出
printf("%d ",a[i]);
}
同样的和(冒泡)交换排序一样,此排序方法仅是适用于小数据的排序,对于大量的数据可以巧妙地运用其它方法综合。希望本篇文章对你有所帮助,如你有更好的思路或者不懂 之处可在文章后留言。本文并非无错误之处,为博主个人总结而出,如有什么错误之处可联系博主。
C语言学习之选择排序的更多相关文章
- C语言学习之桶排序
之前的博文写了交换(冒泡)排序.选择排序,本文就写写桶排序.不过我理解的这样不算是真正上的桶排序,我的比较简单而真正的桶排序是比较复杂的,暂且就叫桶排序吧. 桶排序在排序中应该用的不多吧,个人理解的是 ...
- C语言实现 冒泡排序 选择排序 希尔排序
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...
- 算法学习之选择排序算法的python实现
——参考自<算法图解> def findSmallest(arr): # 假设第一个元素最小 smallest = arr[0] smallest_index = 0 for i in r ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
- C语言排序算法学习笔记——选择类排序
选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...
- C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...
- C语言学习之交换(冒泡)排序
在学习c语言的过程中,在数组内容中我们总是能学习到对一组数据进行排序,对于排序有许多的方法,像 (交换)冒泡排序.选择排序.(基数)桶排序.(插入)二分法排序等等. 我主要以我个人的理解去分析常见的交 ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
- 简单选择排序(Simple Selection Sort)的C语言实现
简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...
随机推荐
- 【树链剖分】洛谷P3379 树链剖分求LCA
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...
- python 版本管理工具 pyenv 使用备忘
安装步骤 安装 xcode-select 以及 homebrew(前者在安装 git 的时候装过,后者 mac 开发必备无需解释) 安装 pyenv brew install pyenv,用 pyen ...
- Centos环境下搭建Asp.NET Core环境和安装Jexus
.NET Core2.0出来以后,很多公司开始用于实践生产,其中的原因想必大家都明白,最主要的一下几点. 跨平台,能够部署在Linux和Docker容器中 性能优越,测试时Node的20倍左右 ...
- 大搜车知乎live中的面试题结题方法记录
1.HTML&CSS(分别10分) 1. 一个div,宽度是100px,此时设置padding是20px,添加一个什么css属性可以让div的实际宽度仍然保持在100px,而不是140px? ...
- 使用mysql乐观锁解决并发问题
案例说明: 银行两操作员同时操作同一账户.比如A.B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后提交.最后实际账户余额为1000 ...
- Asp.net Mvc 与 Web Api生命周期对比
完整的生命周期比较复杂,对细节感兴趣的同学可购买老A的图书学习:传送门 本文只简单讲述路由注册.controller创建.action选择的3个主逻辑线,其他的内容大家可自己阅读相应的代码 先上二者单 ...
- bzoj:2595: [Wc2008]游览计划
Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个景点:否则表示控制该方块至少需要的志愿者数 ...
- COGS 2482. Franky的胡子【二分,高精度】
2482. Franky的胡子 ☆ 输入文件:beard.in 输出文件:beard.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] Franky很苦恼他一直 ...
- 二维字符数组利用gets输入
char a[10][81];for(int i=0;i<10;i++)gets(a[i]); a是二维数组的数组名,相当于一维数组的指针,所以a[i]就相当于指向第i个数组的指针,类型就相当于 ...