10-8-简单选择排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分

第10章  内部排序 - 简单选择排序

——《数据结构》-严蔚敏.吴伟民版

       源码使用说明  链接☛☛☛ 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

       课本源码合辑  链接☛☛☛ 《数据结构》课本源码合辑

       习题集全解析  链接☛☛☛ 《数据结构题集》习题解析合辑

 

       本源码引入的文件  链接☛ SequenceListType.c

 

      文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲10 内部排序\08 SelectSort

 

概述

       简单选择排序(Simple Selection Sort)是选择排序(Selection Sort)的一种,一趟简单选择排序的操作为:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1≤i≤n)个记录交换之。

解析

       在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,即待排序记录初始状态是按第一条记录最大,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关

源码

       文件一 ☛  SelectSort.h 

       文件二 ☛  SelectSort.c 

       文件三 ☛  SelectSort-main.c (测试文档)

       文件四 ☛  TestData.txt(排序表测试数据)

测试结果展示

       更多章节持续更新中...微笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构及算法C语言严蔚敏。VC6运行通过,这个是源代码CPP文件,包含顺序线性表、单链表的插入、删除、查找。包含监视哨查找,折半查找,直接插入排序,希尔排序,冒泡排序,快速排序,选择排序。里面包含超大量的注释,包括对VC6的语法解释和算法的解释和理解。具体效果可以看 http://download.csdn.net/detail/changechange/8236207 我上次上传的 EXE demo,带输入输出,能与用户交互。在运行的时候会把整个运算的过程都显示出来。摘录代码如下://数据结构 上机第一次 栈应用,转换进制题目。 //请用每一个cpp作为一个项目,不要把多个cpp放到同一个项目中,因为我为每个cpp都定义了main。 //这个教材上没有,只能自己补全了 #include using namespace std; //p10 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; //下面这行书上没找到,自己补的。 typedef int SElemType; //p46书上的。 #define STACK_INIT_SIZE 100 //定义最初申请的内存的大小 #define STACKINCREMENT 10 //每一次申请内存不足的时候扩展的大小 typedef struct { SElemType *base; //在栈构造之前和销毁之后,base的值为null SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 }SqStack; //定义顺序栈别名。 //构造一个空栈S Status InitStack(SqStack &S) { // 参考之前的 List.cpp中队malloc的解释。 S.base=(SElemType *) malloc(STACK_INIT_SIZE * sizeof (SElemType)); if (!S.base) exit(OVERFLOW); // 存储分配失败 S.top = S.base; //初始时栈顶等于栈低 S.stacksize = STACK_INIT_SIZE; //初始栈容量 return OK; } //end of InitStack //插入元素e为新的栈顶元素 Status Push(SqStack &S, SElemType e) { if (S.top - S.base >= S.stacksize) // 栈满,追加存储空间 { S.base = (SElemType *) realloc(S.base, //原栈底指针 (S.stacksize + STACKINCREMENT) * sizeof (SElemType)); //新大小 if (!S.base) exit(OVERFLOW); // 存储分配失败 //调整栈顶的位置 S.top = S.base + S.stacksize; //修改栈大小为新的大小 S.stacksize += STACKINCREMENT; } //*符号为求值符。 *S.top++ = e; //先把e压入栈顶,S.top再增1指向栈顶元素e的下一个位置 return OK; } //end of Push // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR Status Pop(SqStack &S, SElemType &e) { if (S.top == S.base) //栈顶=栈底表示空栈,如果空栈,报错 return ERROR; e = *--S.top; //S.top先减1指向栈顶元素,再取值,赋值给e用于返回。 return OK; } //这个书上没有,自己加的 //书上没有,自己写的,用来处理每一个元素的data Status PrintEach(SElemType e){ cout<<e<<";"; return OK; } //从栈底依次对栈中每个元素调用函数visit(),主要用于输出 //关于visit的解释参考 List.cpp Status StackTraverse(SqStack &S,Status(* visit)(SElemType)){ int l = S.top-S.base; S.top=S.base; //从栈底开始输出 for(int i=0;i<l;i++) //用长度控制输出的个数 { (* visit)(*(S.top)++); } return OK; } // 若栈S为空栈,则返回TRUE,否则返回FALSE Status StackEmpty(SqStack &S) { //栈顶指针S.top是否等于栈底指针S.base是判断栈是否为空的条件 if (S.top == S.base) return TRUE; else return FALSE; } //p48 进行进制转换 //对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 void conversion() // 算法3.1 { SqStack S; //声明顺序栈S unsigned int N; //unsigned 表示无符号,unsigned int 从0开始,非负整数 SElemType e; //栈元素e InitStack(S); //构造空栈S cout<=0)"<<endl; scanf("%d",&N); //获取用户的输入,%d 是对数据的格式化。 &N 表示对变量 N 引用。 while (N) //只要n不等于0就循环。从n为用户输入的十进制数开始,一直到n等于0为止 { Push(S, N % 8); //n除以8的余数(8进制的低位)入栈 //先压入的余数是八进制的低位,后压入的余数是八进制的高位 N = N / 8; //令n等于n整除以8的商,进入下轮循环 } //我自己加的,先输出一遍栈内的内容。 cout<<"从底到顶输出栈内的内容,用于调试:"; StackTraverse(S,PrintEach); cout<<endl; //循环结束时,n等于0 while (!StackEmpty(S)) //只要栈S没pop空就不断循环,直到pop出栈底元素栈S为空为止 { Pop(S, e); //pop出栈顶元素且赋值给e进行返回 //先pop出的是八进制的高位,后pop出的是八进制的低位 printf("%d", e); //依次输出e } //循环结束时,栈S为空 cout<<endl; } int main() { for(int i=0;i<4;++i) conversion(); return 0; }
内容如下: 数据结构学习资料 ................\严蔚敏教材 习题集答案 ................\.....................\第一 绪论.doc ................\.....................\第七 图.doc ................\.....................\第三 栈与队列.doc ................\.....................\第九 查找.doc ................\.....................\第二 线性表.doc ................\.....................\第五 数组和广义表.doc ................\.....................\第八 动态存储管理.doc ................\.....................\第六 树和二叉树.doc ................\.....................\第十 内部排序.doc ................\.....................\第四 串.doc ................\各习题题及答案 ................\................\各习题 ................\................\........\第10排序自测题.doc ................\................\........\第10排序自测题答案.doc ................\................\........\第1概论.doc ................\................\........\第1概论答案.doc ................\................\........\第2线性表.doc ................\................\........\第2线性表答案.doc ................\................\........\第3自测卷.doc ................\................\........\第3自测卷答案.doc ................\................\........\第4—5自测卷.doc ................\................\........\第4—5自测卷答案.doc ................\................\........\第6二叉树.doc ................\................\........\第6二叉树答案.doc ................\................\........\第7答案.doc ................\................\........\第7自测题.doc ................\................\........\第9自测卷.doc ................\................\........\第9自测卷答案.doc ................\................\第10排序自测题.doc ................\................\第10排序自测题答案.doc ................\................\第1概论.doc ................\................\第1概论答案.doc ................\................\第2线性表.doc ................\................\第2线性表答案.doc ................\................\第3自测卷.doc ................\................\第3自测卷答案.doc ................\................\第4—5自测卷.doc ................\................\第4—5自测卷答案.doc ................\................\第6二叉树.doc ................\................\第6二叉树答案.doc ................\................\第7答案.doc ................\................\第7自测题.doc ................\................\第9自测卷.doc ................\................\第9自测卷答案.doc ................\数据结构基础题及答案 ................\....................\cs01.doc ................\....................\cs02.doc ................\....................\cs03.doc ................\....................\cs06.doc ................\....................\cs07.doc ................\....................\cs09.doc ................\....................\cs10.doc ................\....................\da01.doc ................\....................\da02.doc ................\....................\da03.doc ................\....................\da06.doc ................\....................\da07.doc ................\....................\da09.doc ................\....................\da10.doc ................\....................\mn01.doc ................\....................\mn02.doc ................\....................\mnda01.doc ................\....................\mnda02.doc ................\....................\qz01.doc ................\....................\qz02.doc ................\....................\qz03.doc ................\....................\qz04.doc ................\....................\qz05.doc ................\....................\qz06.doc ................\数据结构考研试题精选及答案 ................\..........................\东北大学2000年数据结构试题.doc ................\..........................\动态存储管理答案.doc ................\..........................\北京邮电大学1999年数据结构试题.doc ................\..........................\清华大学2000年硕士生入学考试数据结构与程序设计试题.doc ................\..........................\第 5 数组和广义表.doc ................\..........................\第10 排序.doc ................\..........................\第10 排序答案.doc ................\..........................\第1 绪论.doc ................\..........................\第2 线性表.doc ................\..........................\第2 线性表答案.doc ................\..........................\第3 栈和队列.doc ................\..........................\第6 树和二叉树答案.doc ................\..........................\第9 查找答案.doc ................\..........................\第七 图.doc ................\..........................\第三 栈和队列答案.doc ................\李春葆:数据结构习题解析(C语言).pdf

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值