上一篇文章中讲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语言学习之选择排序的更多相关文章

  1. C语言学习之桶排序

    之前的博文写了交换(冒泡)排序.选择排序,本文就写写桶排序.不过我理解的这样不算是真正上的桶排序,我的比较简单而真正的桶排序是比较复杂的,暂且就叫桶排序吧. 桶排序在排序中应该用的不多吧,个人理解的是 ...

  2. C语言实现 冒泡排序 选择排序 希尔排序

    // 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...

  3. 算法学习之选择排序算法的python实现

    ——参考自<算法图解> def findSmallest(arr): # 假设第一个元素最小 smallest = arr[0] smallest_index = 0 for i in r ...

  4. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

  5. C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...

  6. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  7. C语言学习之交换(冒泡)排序

    在学习c语言的过程中,在数组内容中我们总是能学习到对一组数据进行排序,对于排序有许多的方法,像 (交换)冒泡排序.选择排序.(基数)桶排序.(插入)二分法排序等等. 我主要以我个人的理解去分析常见的交 ...

  8. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  9. 简单选择排序(Simple Selection Sort)的C语言实现

    简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...

随机推荐

  1. 【二分图】洛谷P2055假期的宿舍

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  2. Core Animation 文档翻译 (第二篇)

    Core Animation 文档翻译 (第二篇) 核心动画基础要素 核心动画为我们APP内Views动画和其他可视化元素动画提供了综合性的实现体系.核心动画不是我们APP内Views的替代品,相反, ...

  3. 将linux下的office从libreoffice换成wps

    1.下载wps的linux的deb版本 2.运行dpkg -i wpsXXX.deb 3.提示权限不够 4.运行 sudo dpkg -i wpsXXX.deb 5.提示错误 未安装软件包 libpn ...

  4. Android刮刮卡自定义控件

    网上的都是自己绘制的或者图片,我的需求是可以随意的自定义底部和顶部的布局.所以自己重写一个,原理就是直接继承 View 来实现一个刮层,让这个刮层和图片以及文字不产生任何依赖,再结合 FrameLay ...

  5. 阻止a标签的默认事件及延伸

    先贴一段代码 <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

  6. naturalWidth 与 naturalHeight

    在HTML 5中,新增加了两个用来判断图片的宽度和高度的属性(图片原始大小),分别为 naturalWidth 和naturalHeight属性,例子如下: 注意问题: - 图片没有加载的时候 值为0 ...

  7. 使用quartz实现不重启服务器修改自定义配置

    为了方便维护系统,开发中通常会设置一些自定义参数,写在单独的配置文件里,需要调整时可直接登录服务器修复配置文件,而不需要修改程序.但尴尬的是,web服务器并不会自动重新加载配置文件,重启服务器又会中断 ...

  8. Java集合源码分析(四)HashMap

    一.HashMap简介 1.1.HashMap概述 HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对<key,value>映射.此类不保证映射的顺序,假定哈希函数将元素 ...

  9. 学习web前端技术的笔记,仅供自己查阅备忘,移动对font-size的控制(并非原创)

    假设根字体font-size的值是40px, 640/40=16,16就是px换算rem的值 function initHtmlFontSize(){ //获取可可视屏幕的宽度 var _width= ...

  10. HDU 4010 Query on The Trees

    Problem Description We have met so many problems on the tree, so today we will have a query problem ...