CPrimerPlus第十一章中的“选择排序算法”学习
C Primer Plus第十一章字符串排序程序11.25中,涉及到“选择排序算法”,这也是找工作笔试或面试可能会遇到的题目,下面谈谈自己的理解。
举个例子:对数组num[5]={3,5,2,1,4}中各元素进行从小到大的排序并输出(为了更清楚了解排序过程,要求输出每一轮排序后的结果)。
附上程序(写的有点复杂,主要代码只有几行):
/* 对一个整数数组中的元素从小到大排序 */
/************* 选择排序法 *************/
/********* by行动救赎 2016.9.21********/ #include <stdio.h>
void sort(int *, int); //数组排序
void prnt(int *, int); //数组打印 /*****************主函数******************/
int main(void)
{
int num[] = {,,,,}; sort(num, ); return ;
} /*****************排序函数******************/
void sort(int * num, int n)
{
int i, temp;
int top, seek; printf("\n第%d次结果:", );
prnt(num, n);
for (top=; top<n-; top++)
{
for(seek=top+; seek<n; seek++)
{
if(num[top] > num[seek])
{temp=num[top]; num[top]=num[seek]; num[seek]=temp;}
prnt(num, n);
}
printf("\n第%d次结果:", top+);
prnt(num, n);
}
} /*****************打印数组******************/
void prnt(int * num, int n)
{
int i;
for(i=; i<n; i++)
printf("%d ", *(num+i));
printf("\n");
}
1.第一个数和剩下的n-1个数依次比较,遇到比第一个数小的数,就将该数和第一个数交换:3和5比,3<5,不用交换,35214;3和2比,3>2,交换,25314;2和1比,2>1,交换,15324;1和4比较,1<4,不换,15324。
2.第二个数和剩下的n-2个数依次比较,遇到比第二个数小的数,就将该数和第二个数交换:5<3?,换,13524;3<2?换,12534;2<4?不换,12534。
3.第三个数和剩下的n-3个数依次比较,遇到比第三个数小的数,就将该数和第三个数交换:5<3?,换,12354;3<4?不换,12354。
4.第四个数和剩下的n-4个数依次比较,遇到比第四个数小的数,就将该数和第四个数交换:5<4?,换,12345。

下面是核心思路的代码:
for (top=0; top<n-1; top++)
{
for(seek=top+1; seek<n; seek++)
if(num[top] > num[seek])
{temp=num[top]; num[top]=num[seek]; num[seek]=temp;}
}
一点浅薄的探究,和大家分享一下。
CPrimerPlus第十一章中的“选择排序算法”学习的更多相关文章
- Python中的选择排序
选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7, ...
- Java基础语法(8)-数组中的常见排序算法
title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
- python选择排序算法总结
选择排序算法: a=[6,5,4,3,2,1] 算法思路: 第一步:在列表的第一个位置存放此队列的最小值 声明一个变量min_index等于列表的第一个坐标值0 从第一个位置0坐标开始,和它后边所有的 ...
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- C语言利用指针排序与选择排序算法
//读入字符串,并排序字符串 #include <stdio.h> #include <string.h> #define SIZE 81 #define LIM 20 #de ...
- 基于Java实现的选择排序算法
选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累. 简述 选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间.其实选择排序原理很简单,就是在未排序序列 ...
随机推荐
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- 通过实战理解C语言精要——函数篇
前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...
- 【Python】[面向对象高级编程] 使用__slots__,使用@property
1.使用 __slots__ 给实例绑定方法, >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age .. ...
- 发布ASP.NET Core网站到IIS
打开VS2015,新建项目: 选择模板,取消身份验证: 项目加载完成后就可以运行了: 下面要发布到IIS: 需要安装从IIS到Kestrel server的反向代理,下载地址:.NET Core Wi ...
- rcync 备份命令
不写复杂的命令参数什么意思,网上一搜一大堆. 这是我用的命令: rsync -ax --progress -e "ssh -p 12345" --delete root@143.2 ...
- Ubuntu16.04/LinuxMint18安装openjdk-7-jdk
LinuxMint18的安装源已经默认没有openjdk7了,所以要自己手动添加仓库,如下: sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-ge ...
- Django学习笔记(现学现写,实时更新)
说明:我是先上手做一些简单的例子,然后在尝试的过程中理解Django的原理,笔记也是按这个思路来的. 一.Django结构与基本文件介绍 1. django-admin.py 工程管理工具,主要用于创 ...
- Objective-C总Runtime的那点事儿(一)消息机制
最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎必问,例 如:RunLoop,Block,内存管理等.其他的问题 ...
- jQuery animate动画 stop()方法详解~
一.动画格式: 格式一:jQueryObject.animate( cssProperties, options ) 格式二:$('#id').animate( styles[, duration ] ...
- DataTable的过滤需要的数据
DataView dv = datatable.DefaultView; (1) dv.RowFilter = "RowsId>3"; //此 ...