c语言实现【选择排序】:数据结构最后一章排序算法。全部使用c语言代码实现。包含算法定义,思想,文字版实现过程,动图演示等。

题目

本栏目是数据结构C语言版的十大排序算法,因为我只考常用的一些排序算法,所以会只更新一部分常用算法,每个排序分为算法思想,算法代码和执行结果三个部分展现。

更新第二篇:C语言实现选择排序


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692

一、算法思想

1.算法执行过程动图演示:

请添加图片描述

2.定义:

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

3.算法思想:

1.n个数据一共需要进行n-1趟排序后,数组内元素为有序状态
2.将当前序列的最小值找出
3.将最小值与i的位置进行交换,i++后再次扫描的序列就是i++到n+1的序列,0-i这个序列中存放的是已通过选择排序好的有序数列。
4.循环,i++。

4.我的总结:

选择排序就是先扫描待排序列,选择出最小值,把它丢到(与其交换)第一个元素那里,然后有序序列+1,待排序序列-1,如此往复的过程,直到n-1次后完成最终排序。
稳定性为:不稳定
时间复杂度为:O(n ^2)
空间复杂度为:O(n)

5.学习笔记:

请添加图片描述

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

void selectsort(int a[], int n)
{
	for (int i = 0; i < n - 1; i++)//一共进行n-1趟
	{
		int min = i;//记录最小值
		for (int j = i + 1; j < n; j++)//在待排序列中选择最小元素
			if (a[j] < a[min])
				min = j;
		if (min!=i)//更新最小元素位置
		{
			int tmp = a[i]; a[i] = a[min]; a[min] = tmp;
		}
	}
}

void main()
{
	int a[] = { 1,2,3,4,9,8,7,6,5 };
	int n = sizeof(a) / sizeof(int);
	selectsort(a, n);
	for (int i = 0;i < n; i++)
		printf("%d ", a[i]);
}

## 3.一种更加简单的选择排序 这个排序我不知道是否属于选择排序,但是是基于选择排序的代码写的。只需要两行代码即可完成,总之非常简单(比冒泡还好记),适合考试时把所有排序算法忘记的同学使用,代码是完全正确的,可以完成排序认为。
for (int i = 0; i < n - 1; i++)
		for (int j = i + 1; j < n; j++)
			if (a[i] < a[j])
			{
				int tmp = a[i]; a[i] = a[j]; a[j] = tmp;
			}

三、执行结果

在这里插入图片描述
输入:

a[] = { 1,2,3,4,9,8,7,6,5 };

输出:

1 2 3 4 5 6 7 8 9
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据结构》(C语言版)<br>算法源码及运行演示系统使用说明<br>一、启动演示系统<br>双击演示系统应用程序文件“DS_VC_ALGO.EXE”启动演示系统,出现图1所示界面。<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>图1 《数据结构》(C语言版)算法源码及运行演示系统主界面<br>二、演示系统使用步骤<br>除了个别算法之外,演示系统给出了《数据结构》(C语言版)书中算法对应的程序代码(CPP文件)和测试运行程序(VC++6.0的EXE文件)。通过本系统,可以显示算法的源代码以及运行结果。具体操作步骤如下:<br>1.选择相应章<br>单击演示系统界面右侧章选择按钮。<br>例如,要选择第6章,则单击“第6章”选择按钮。<br>当相应章被选择后,窗口的右侧部分将列出本章的算法选择按钮。<br>例如,选择第6章后,窗口的右侧部分将显示第6章中的算法6.1-6.13和6.15的选择按钮。由于书中的算法6.14和6.16只是示意性算法,故未给出源码,其按钮上的文字为灰色,处于“无效”状态。<br>2.选择相应章中的算法<br>单击窗口右侧部分所列举的本章某个算法选择按钮,被选择的算法的源码将在窗口左侧空白区域中显示。对于较长的源码,单击显示区域后,可用键盘的光标键和翻页键浏览源码。<br> 例如,选择了第6章中的算法6.5后界面如图2所示:<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>图2 选择算法6.5<br>3.运行测试程序<br>单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。若运行按钮为灰色,表示该算法无单独测试程序。<br> 例如,算法6.5的测试运行窗口如图3所示:<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>图3 测试运行窗口<br>测试运行说明:<br>测试运行窗口显示程序的执行过程及结果。若在显示过程中出现运行窗口无法正常演示的情况,只需调节运行窗口大小即可正常显示(调节最小化按钮或窗口最大化/还原按钮“ ”)。<br>三、退出演示系统<br>使用完毕后,单击窗口右上角关闭按钮“ ”退出演示系统。<br>四、测试程序示例<br>在《数据结构》的课程教学中,各抽象数据类型的设计与实现是重要的学习和实践环节。为此,本系统只给出了各算法源码的测试程序的可执行文件。在此,给出算法6.5的测试程序示例,以供参考。<br>算法6.5是中序遍历线索二叉树的非递归算法,要对其源码进行测试,可首先调用算法6.6及6.7建立中序线索二叉树。以下是测试程序的源码,相关类型和辅助函数定义在文件include06.h和include06.cpp中,此略。<br>
算法C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。第二部分“数据结构”(第3~5章)讲解算法分析中必须掌握的数据结构知识,主要包括基本数据结构、抽象数据结构、递归和树。第三部分“排序”(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、冒泡排序、希尔排序等)、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征。第四部分“搜索”(第12~16章)在进一步讲解符号表、树等抽象数据类型的基础上,重点讨论散列方法、基数搜索以及外部搜索方法。 书中提供了用C语言描述的完整算法源程序,并且配有丰富的插图和练习。作者用简洁的实现将理论和实践成功地结合了起来,这些实现均可在真实应用上测试,使得本书自问世以来备受程序员的欢迎。 本书可作为高等院校计算机相关专业算法数据结构课程的教材和补充读物,也可供自学之用。 目录 出版者的话 译者序 前言 第一部分 基础知识  第1章 引言   1.1 算法   1.2 典型问题——连通性   1.3 合并一查找算法   1.4 展望   1.5 主题概述  第2章 算法分析的原理   2.1 实现和经验分析   2.2 算法分析   2.3 函数的增长   2.4 大O符号   2.5 基本递归方程   2.6 算法分析示例   2.7 保证、预测及局限性 第二部分 数据结构  第3章 基本数据结构   3.1 构建组件   3.2 数组   3.3 链表   3.4 链表的基本处理操作   3.5 链表的内存分配   3.6 字符串   3.7 复合数据结构  第4章 抽象数据类型   4.1 抽象对象和对象集   4.2 下推栈ADT   4.3 栈ADT客户示例   4.4 栈ADT的实现   4.5 创建一个新ADT   4.6 FIFO队列和广义队列   4.7 复制和索引项   4.8 一级ADT   4.9 基于应用的ADT示例   4.10 展望  第5章 递归与树   5.1 递归算法   5.2 分治法   5.3 动态规划   5.4 树   5.5 树的数学性质   5.6 树的遍历   5.7 递归二叉树算法   5.8 图的遍历   5.9 综述 第三部分 排序  第6章 基本排序方法   6.1 游戏规则   6.2 选择排序   6.3 插入排序   6.4 冒泡排序   6.5 基本排序方法的性能特征   6.6 希尔排序   6.7 对其他类型的数据进行排序   6.8 索引和指针排序   6.9 链表排序   6.10 关键字索引统计  第7章 快速排序   7.1 基本算法   7.2 快速排序算法的性能特征   7.3 栈大小   7.4 小的子文件   7.5 三者取中划分   7.6 重复关键字   7.7 字符串和向量   ……  第8章 归并与归并排序  第9章 优先队列和堆排序  第10章 基数排序  第11章 特殊用途的排序方法 第四部分 搜索  第12章 符号表和二叉搜索树  第13章 平衡树  第14章 散列  第15章 基数搜索  第16章 外部搜索

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值