C语言实现顺序表字符型数据排序

ops/2024/10/20 10:12:57/

 实现直接插入、冒泡、直接选择排序算法

#include <stdio.h>
#include <stdlib.h>typedef char InfoType;#define n 10					//假设的文件长度,即待排序的记录数目
typedef char KeyType;			//假设的关键字类型
typedef struct {				//记录类型KeyType key;				//关键字项InfoType otherinfo;			//其它数据项,类型InfoType依赖于具体应用而定义
} RecType;
typedef RecType SeqList[n+1];	//SeqList为顺序表类型,表中第0个单元一般用作哨兵void InsertSort(SeqList R);  
void BubbleSort(SeqList R);
void SelectSort(SeqList R);
//测试用例 
//阴阳乾兑离震巽坎艮坤 
int main()
{int i;SeqList R;  //R是大小为n+1的结构数组 char choice;while (1){system("cls");printf("\n\n\n\n");printf("\t\t               线性表的排序  \n");printf("\t\t======================================");printf("\n\n");printf("\t\t             1:建立线性表            \n");printf("\t\t             2:显示线性表            \n");printf("\t\t             3:插入排序              \n");printf("\t\t             4:冒泡排序              \n");printf("\t\t             5:直接选择排序          \n");printf("\n");printf("\t\t             0:退出        \n");printf("\n");printf("\t\t请选择:");choice = getchar();system("cls");switch(choice){case '1':				printf("请输入欲排序的数(10个):\n");for (i=1;i<=n;i++)scanf("%c",&R[i].key);printf("线性表创建成功!\n");system("Pause");break;case '2':printf("线性表中的数据为:\n");for (i=1;i<=n;i++)printf("%d ",R[i].key);system("Pause");break;case '3':				InsertSort(R);printf("插入排序成功!\n");system("Pause");break;case '4':				BubbleSort(R);printf("冒泡排序成功!\n");system("Pause");break;case '5':				SelectSort(R);printf("直接选择排序成功!\n");system("Pause");break;						case '0':exit(0);}}
}//对顺序表R中的记录R[1..n]按递增序进行插入排序
void InsertSort(SeqList R)
{int i,j;for(i=2;i<=n;++i)if( R[i].key<R[i-1].key) { // 将 R[i] 插入有序子表R[0]=R[i]; // 复制为哨兵R[i]=R[i-1];for(j=i-2; R[0].key<R[j].key;--j)R[j+1]=R[j]; // 记录后移R[j+1]=R[0]; // 插入到正确位置}
}//R[1..n]是待排序的文件,采用自下而上扫描对R做冒泡排序
void BubbleSort(SeqList R)
{int m,i,j,flag=1; RecType x;m=n-1;while((m>0)&&(flag==1)){ flag=0;for(j=1;j<=m;j++)if(R[j].key>R[j+1].key){ flag=1;x=R[j];R[j]=R[j+1];R[j+1]=x; // 交换}//endifm--;}//endwhile
}//对R[1..n]进行直接选择排序,用R[0]做暂存单元
void SelectSort(SeqList R)
{RecType x;int k,i,j;for (i=1; i<n; ++i){ // 在 R[i..n] 中选择 key 最小的记录k=i;for( j=i+1;j<=n ; j++)//遍历找最小if ( R[j].key <R[k].key) k=j;if(k!=i) {x=R[k];R[k]=R[i];R[i]=x; }	//交换}
}

声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/ops/55854.html

相关文章

火山云存储TOS前端预签名上传文件

使用POSTMAN中的PUT方法&#xff0c;Body选择binary, 然后添加文件&#xff0c;可以上传图片&#xff0c;视频&#xff0c;音频等

VScode 常用插件

基础开发插件 Chinese (Simplified)&#xff08;简体中文语言包&#xff09;&#xff1a;这是适用于VS Code的中文&#xff08;简体&#xff09;语言包&#xff0c;适用于英语不太流利的用户。Auto Rename Tag&#xff1a;这个插件可以同步修改HTML/XML标签&#xff0c;当用户修…

玄机——第四章 windows实战-emlog wp

文章目录 一、前言二、概览简介 三、参考文章四、步骤&#xff08;解析&#xff09;准备阶段#1.0步骤#1通过本地 PC RDP到服务器并且找到黑客植入 shell,将黑客植入 shell 的密码 作为 FLAG 提交;拓展1.1 步骤#2通过本地 PC RDP到服务器并且分析黑客攻击成功的 IP 为多少,将黑客…

永磁同步电机参数辨识算法--模型参考自适应辨识电感

本文采用 MRAS 在线辨识电感参数&#xff08;Ld、Lq&#xff09; 一、原理介绍 从组成部分来看&#xff0c;MRAS由三个重要部分构成分别为参考、可调以及自适应律。参考模型相当于IPMSM 参数实时变化的准确值&#xff0c;即作为可调模型的参考值&#xff0c;可调模型依据参数…

一句话回答的前端面试题

该篇文章为一句话的答案&#xff0c;想看更详细的面试题请看这篇>《前端面试题》 原型链&#xff1a; 实例与原型的链条&#xff0c;原型是prototype&#xff0c;链是__proto__&#xff0c;每个函数有一个原型对象&#xff0c;函数在创建时有一个默认属性 prototype&#x…

人工智能--目标检测

欢迎来到 Papicatch的博客 文章目录 &#x1f349;引言 &#x1f349;概述 &#x1f348;目标检测的主要流程通常包括以下几个步骤 &#x1f34d;数据采集 &#x1f34d;数据预处理 &#x1f34d;特征提取 &#x1f34d;目标定位 &#x1f34d;目标分类 &#x1f348;…

Kylin系列(二)架构解析:深入理解 Kylin 的架构设计

目录 1. 引言 2. Kylin 的基本概念 2.1 预计算 2.2 多维数据集&#xff08;Cube&#xff09; 2.3 维度和度量 3. Kylin 的架构设计 3.1 数据源 3.2 数据建模 3.2.1 星型模型 3.2.2 雪花模型 3.3 多维数据集构建 3.3.1 数据导入 3.3.2 维度和度量计算 3.3.3 存储优…

G1 垃圾收集器

从 JDK1.9 开始默认 G1&#xff0c;应用在多处理器和大容量内存环境中。 基础概念 Region G1 给整一块Heap内存区域均匀等分了N个 Region&#xff0c;N 默认情况下是 2048。 Region的大小只能是1M、2M、4M、8M、16M或32M (1-32M,并且为2的指数)&#xff0c;比如-Xmx16g -Xms…