设计思路:选择排序:设计待排序的记录存放于数组【1,n】大小中,通过n-1次数比较,从n个记录中选出关键字最小的记录,让其与第一个值交换。堆排序:在排序过程中,利用二叉树的性质,将【1,n】关键字顺序记录进二叉树中,利用二叉树双亲之间的关系,在当前序列中选择最大的记录。调整堆->建初堆->堆排序。冒泡排序:将待排序数组里的关键字,相邻之间比较,若靠前的比靠后的大,两者交换位置,而后循环下去,直到将最大的排到最后面。直接插入排序:每次使用顺序查找,将【i】位置的值,插入到【1,i】的序列里,要判断插入位置。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
typedef int type_hyb;
typedef struct node{type_hyb* hyb;type_hyb lenght;
}node;
//创建一堆随机数,其中rand()为固定函数
node* creat(node *p,int lenght) {//node* p = (node*)malloc(sizeof(node));p->hyb = (type_hyb*)malloc(sizeof(type_hyb)*lenght);p->lenght = lenght;srand(time(NULL));for (int i = 1; i <= p->lenght; i++) {p->hyb[i] = rand() % 100;}return p;
}
//选择排序
void sort_1(node *p) {int k,t;for (int j = 1; j < p->lenght; j++) {int a = p->hyb[j];for (int i = j+1; i <= p->lenght; i++) {if (p->hyb[i] < a){a = p->hyb[i];k = i;}}t = p->hyb[j];p->hyb[j]= a;p->hyb[k] = t;}}void heap(node* p,int s,int m) {int rc = p->hyb[s];for (int j = 2 * s; j <= m; j *= 2) {if (j < m && p->hyb[j] < p->hyb[j + 1]) {j++;}if (rc >= p->hyb[j]) {break;}p->hyb[s] = p->hyb[j];s = j;}p->hyb[s] = rc;}void creatheap(node* p) {for (int i = p->lenght / 2; i > 0; i--) {heap(p,i,p->lenght);}}
//堆排序
void sort_11(node* p) {creatheap(p);int x;for (int i = p->lenght; i > 1; i--) {x = p->hyb[1];p->hyb[1] = p->hyb[i];p->hyb[i] = x;heap(p,1,i-1);}}//冒泡排序
void sort_2(node *p) {int t;for (int i = 1; i <p->lenght; i++) {for (int j = 1; j <=p->lenght-i; j++) {if (p->hyb[j] > p->hyb[j + 1]) {t = p->hyb[j];p->hyb[j] = p->hyb[j + 1];p->hyb[j + 1] = t;}}}
}type_hyb sort_2222(node* p, int low, int length) {p->hyb[0] = p->hyb[1];while (low < length) {while (low<length&&p->hyb[length] >= p->hyb[0]) {length--;}p->hyb[low] = p->hyb[length];while (low < length && p->hyb[length] <= p->hyb[0]) {low++;}p->hyb[length] = p->hyb[low];        }//p->hyb[low] = p->hyb[0];return low;
}//快速排序
void sort_222(node *p,int low,int length){int mid;//low = 1, length = p->lenght;if (low < length) {mid=sort_2222(p,low,length);sort_222(p ,low,mid-1);sort_222(p, mid + 1, length);}
}void sort_22(node *p) {sort_222(p,1,p->lenght);
}//插入排序
void sort_3(node *p) {int count;p->hyb[0] = p->hyb[1];//设置哨兵for (int i = 1; i <= p->lenght; i++) {//这个for,循环待排序的数值count = i;/*这个不好解释,举个例子:插入排序:12 1 2 5 8 63 90初始:(12) 1 2 5 8 63 90第一次插入:看1小于12,插在12前面,变成(1 12) 2 5 8 63 90                第二次插入:这个时候,在(1 12)里面要判断2这个数值与这两个数的大小,所以此刻也要for循环,故此需要设置count这个变量俩控制在(1 12)里面的for循环大小                */for (int j = 1; j <= count; j++) {//这个for循环便是在(1 12 ……)里判断数值大小,从而确定插入哪个位置if (p->hyb[i + 1] < p->hyb[j]) {int t;t = p->hyb[j];p->hyb[j] = p->hyb[i + 1];p->hyb[i + 1] = t;}else if (p->hyb[i + 1] >= p->hyb[j]) {int k;k = p->hyb[j+1];p->hyb[j+1] = p->hyb[i + 1];p->hyb[i + 1] = k;}}}}void main() {printf("0-创建一堆数:");printf("1-选择排序:\n");printf("2-冒泡排序:\n");printf("3-插入排序:\n");node* p = new node;//p = NULL;int week, y;type_hyb lenght;do {printf("请你选择功能!\n");int week;scanf_s("%d", &week);switch (week){case 0:printf("请输入你要创建的数组长度:");scanf_s("%d", &lenght);p = creat(p,lenght);printf("创建随机数组成功!");for (int i = 1; i <= lenght; i++)printf("%d\n", p->hyb[i]);printf("请选择是否执行功能:1or0\n");scanf_s("%d", &y);if (y == 1){continue;}elsebreak;case 1:sort_1(p);printf("你的数值“简单选择排序”为:\n" );for (int i = 1; i <= p->lenght; i++) {printf("%d\n",p->hyb[i]);}sort_11(p);printf("你的数值“堆排序”为:\n");for (int i = 1; i <= p->lenght; i++) {printf("%d\n", p->hyb[i]);}printf("请选择是否执行功能:1or0\n");scanf_s("%d", &y);if (y == 1){continue;}elsebreak;case 2:sort_22(p);printf("你的数值“快速排序”为:\n");for (int i = 1; i <= p->lenght; i++) {printf("%d\n", p->hyb[i]);}sort_2(p);printf("你的数值“冒泡排序”为:\n");for (int i = 1; i <= p->lenght; i++) {printf("%d\n", p->hyb[i]);}printf("请选择是否执行功能:1or0\n");scanf_s("%d", &y);if (y == 1){continue;}elsebreak;case 3:sort_3(p);printf("你的数值“插入排序”为:\n");for (int i = 1; i <= p->lenght; i++) {printf("%d\n", p->hyb[i]);}printf("请选择是否执行功能:1or0\n");scanf_s("%d", &y);if (y == 1){continue;}elsebreak;}} while (y == 1);}

C语言数据结构,排序的基本操作。相关推荐

  1. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  2. 数据结构-排序算法(c语言实现篇)

    数据结构-排序算法(c语言实现篇) 排序算法是非常常用的算法,从介绍排序的基本概念,到介绍各种排序算法的思想.实现方式以及效率分析.最后比较各种算法的优劣性和稳定性. 1 排序的概念及应用 1.1 排 ...

  3. 数据结构c语言版第一章答案,《c语言数据结构》第一章概论自测题答案

    <<c语言数据结构>第一章概论自测题答案>由会员分享,可在线阅读,更多相关<<c语言数据结构>第一章概论自测题答案(4页珍藏版)>请在人人文库网上搜索. ...

  4. C语言八大排序算法,附动图和详细代码解释!

    文章来源:电子工程专辑.C语言与程序设计.竹雨听闲 一.前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二. ...

  5. 硬核!C语言八大排序算法,附动图和详细代码解释!

    来源 :C语言与程序设计.竹雨听闲等 一 前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二 八大排序算法 ...

  6. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf

    Matlab讲义-第四章Matlab语言数据结构1-10.pdf 第四章第四章 Matlab语言基础语言基础 Matlab语言程序简洁.可语言程序简洁.可 读性很强而且调试十分容易.读性很强而且调试十 ...

  7. 序列划分c语言,一篇“get”C语言八大排序算法

    如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二.八大排序算法 排序算法作为数据结构的重要部分,系统地学习一下是 ...

  8. 运动会分数统计——C语言数据结构题目

    C语言数据结构题目 1.问题描述 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积分:取前五名 ...

  9. 数据结构-排序算法总结与感悟

    数据结构-排序算法总结 一,排序的基本概念 排序:有n个记录的序列{R1,R2,-,Rn},其相应关键字的序列是{K1,K2, -,Kn },相应的下标序列为1,2,-, n.通过排序,要求找出当前下 ...

  10. c语言如何标志置1与置0,c语言对于文本的基本操作

    字符读写函数  :fgetc和fputc 字符串读写函数:fgets和fputs 数据块读写函数:freed和fwrite 格式化读写函数:fscanf和fprinf 1.字符读写: fgetc函数的 ...

最新文章

  1. ZooKeeper内部原理
  2. Java 多项式求和
  3. 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
  4. Python DES
  5. impala的substr从第几位截到最后一位_天赋不输乔丹,麦迪选秀为何只排第9?看前面几位,第1让老詹吃瘪...
  6. nRF5 SDK for Mesh(四) 源码编译
  7. dbeaver默认值怎么设置_电脑没声音怎么办,峰哥教你如何解决
  8. python 获取运行文件的路径
  9. 4 场直播,哈工大、亚马逊等大咖为你带来机器学习与知识图谱的内容盛宴
  10. oracle请求界面,Oracle EBS如何enable 请求界面 View XML按钮
  11. 商城管理系统源码 商城APP源码 电子商城源码
  12. 进销存php 百度云盘,fb1334 PHP网络版进销存源码WEB进销存源码含说明
  13. 计算机网络故障排查,计算机网络故障诊断和排除方法
  14. 【_ 記 】SQL语句实现三目表达式
  15. unity全栈开发是什么意思_unity3D用什么语言开发好?
  16. r语言html乱码,R语言:读入txt文件中文文本出现乱码解决方案
  17. c++排序(CList类库)
  18. 在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?
  19. echarts 3d饼图
  20. python3 [爬虫入门实战]爬取熊猫直播用户信息

热门文章

  1. 什么是阻塞、非阻塞、同步和异步以及IO模型
  2. APK 签名:v1 v2 v3 v4
  3. 改造 Firefox 浏览器——GitHub 热点速览 v.21.23
  4. 有效括号 python_1111. 有效括号的嵌套深度
  5. Spring In Action 学习 第一章 Spring之旅
  6. element ui 自定义icon图标
  7. 高德地图-设置点标注的文本标签
  8. sre8 sre10_透过窥视镜:安全性和SRE
  9. 如何主动退出小程序(微信小程序)
  10. Pytorch踩坑记:赋值、浅拷贝、深拷贝三者的区别以及model.state_dict()和model.load_state_dict()的坑点