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) 原创文章, ...
随机推荐
- F# 之旅(下)
写在前面的话 学习 F# 一定要去体会函数式编程的特点,推荐一下阮一峰的日志<函数式编程入门教程>. 在这篇文章中 递归函数 记录和可区分联合类型 模式匹配 可选类型 度量单位 类和接口 ...
- PE文件详解二
本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构 ...
- scrollify - 滚动条方式的全屏滚动
jQuery Scrollify Version Beta v1.0.5 Date:2017-04-25 23:45 源代码 (function($, window, document) { 'use ...
- u3d开发中可能会遇到的设计模式
最近一段时间,面试了一些程序员,当然主要招聘的岗位是Unity3D开发.面试过程中对于三年以上的程序员我都会问其在开发中是否会总结一些常用的设计模式和设计方法,当然目的只是想了解程序员的自我学习情况以 ...
- Django-基础之web框架
http协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- Codeforces Round #415 (Div. 2)(A,暴力,B,贪心,排序)
A. Straight «A» time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- IOS safari浏览器登陆时Cookie无法保存的问题
近期完成了一个儿童的测评项目,测试到最后的时候发现在ipad mini上登陆成功之后无法跳转页面,而安卓和pc端都可以,找了大半天bug,发现其他的苹果设备都没问题,只能一个一个的调试,结果发现设备的 ...
- css样式小记
溢出文字展现为... .over-hidd { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; }
- Spark性能调优之资源分配
Spark性能调优之资源分配 性能优化王道就是给更多资源!机器更多了,CPU更多了,内存更多了,性能和速度上的提升,是显而易见的.基本上,在一定范围之内,增加资源与性能的提升,是成正比的:写完了 ...
- DOM解析原理示意
DOM解析原理示意