问题描述

1) 动态输入一组数字序列;

2)实现直接插入排序、简单选择排序、冒泡排序、快速排序算法;

3)在主函数中,依次测试上述算法。

类型定义

#define MAX SIZE 100
typedef int KeyType ;
typedef struct RecType
{ KeyType key ;/*关键字码*/infoType otherinfo; /* 其他域*/
} RecType ;
typedef struct SqList
{     RecType R[MAX_ _SIZE+1]; //R[0]闲置或作哨兵单元int length ;
}SqList ;

解决方案

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define MAX_STACK 100
#define TRUE 0
#define FALSE -1
typedef int KeyType;
typedef struct{KeyType key;
}RedType;
typedef struct{RedType r[MAXSIZE+1];int length;
}SqList;void InitList_Sq(SqList &L)
{int i;L.length = 0;printf("请依次输入顺序表值,以333结束:\n");for (i = 1; i < MAXSIZE; i++) {scanf("%d", &(L.r[i].key));L.length++;if(L.r[i].key==333)break;}
}void straight_insert_sort(SqList &L)    //直接插入排序
{int i, j ;for (i=2; i<=L.length; i++){ L.r[0]=L.r[i]; j=i-1; /* 设置哨兵 */while( L.r[i].key<L.r[j].key){ L.r[j+1]=L.r[j];j--;} /* 查找插入位置 */L.r[j+1]=L.r[0]; /* 插入到相应位置 */ } }void simple_selection_sort(SqList &L)   //简单选择排序
{ int m, n,k;for (m=1; m<L.length; m++){ k=m ; for (n=m+1; n<=L.length; n++)if (L.r[n].key<L.r[k].key) k=n;if (k!=m) /* 记录交换 */{L.r[0]=L.r[m]; L.r[m]=L.r[k];L.r[k]=L.r[0];} }
}void Bubble_Sort(SqList &L)    //冒泡排序
{ int j ,k , flag ;for (j=0; j<L.length-1; j++) /* 共有n-1趟排序 */{flag=TRUE ;for (k=1; k<L.length-j; k++) /* 一趟排序 */{ if (L.r[k+1].key<L.r[k].key){ flag=FALSE ;L.r[0]=L.r[k] ; L.r[k]=L.r[k+1] ; L.r[k+1]=L.r[0] ; }}if (flag==TRUE) break ;}
}int quick_one_pass(SqList &L , int low, int high)
{ int i=low, j=high ;L.r[0]=L.r[i] ; // R[0]作为临时单元和哨兵do { while ((L.r[i].key<L.r[j].key)&&(j>i))j-- ;if (j>i) { L.r[i]=L.r[j] ;i++; }while ((L.r[i].key<L.r[i].key)&&(j>i))i++ ;if (j>i){ L.r[j]=L.r[i] ; j--; }} while(i!=j) ; /* i=j时退出扫描 */L.r[i]=L.r[0] ; return(i) ;
}void quick_Sort(SqList &L , int low, int high)
{int k , stack[MAX_STACK] , top=0; do{ while (low<high){k=quick_one_pass(L,low,high); stack[++top]=high ;stack[++top]=k+1 ;
/* 第二个子序列的上,下界分别入栈 */high=k-1 ; }if (top!=0) { low=stack[top--] ; high=stack[top--] ;}}while (top!=0&&low<high) ;
}int main()
{SqList L;InitList_Sq(L);printf("直接插入排序法");straight_insert_sort(L);printf("排序成功");for(int i=1;i<L.length;i++)printf("%d ",L.r[i].key);printf("\n");printf("选择排序");simple_selection_sort(L);printf("排序成功");for(int i=1;i<L.length;i++)printf("%d ",L.r[i].key);printf("\n");printf("冒泡排序");Bubble_Sort(L);printf("排序成功");for(int i=1;i<L.length;i++)printf("%d ",L.r[i].key);printf("\n");printf("快速排序");quick_Sort(L,1,L.length);printf("排序成功");for(int i=1;i<L.length;i++)printf("%d ",L.r[i].key);printf("\n");return 0;
}

参考文章

https://www.cnblogs.com/leo-lv/p/10639099.html

https://blog.csdn.net/qq_20011607/article/details/82357239

C++——《数据结构与算法》实验——排序算法的实现相关推荐

  1. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  2. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  3. 数据结构与算法之排序算法

    数据结构与算法之排序算法 排序算法的介绍 ​ 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程. 排序的分类 1)内部排序:指将需要处理的数据都加载到内部 ...

  4. 十一大排序算法的实现

    十一大排序算法的实现 前言 终于写完了,九大排序算法亲自打一遍,给自己加深印象,算是一种模板,留给自己以后用,也分享给大家. U p d a t e : Update: Update: 2020.12 ...

  5. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  6. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  7. 数据结构与算法实验题 4.2 Who is the strongest

    数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...

  8. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  9. 数据结构与算法实验题 6.1 鼹鼠掘土挑战赛

    数据结构与算法实验题 6..1 鼹鼠掘土挑战赛 ★实验任务 在潘多拉星的哈利路亚山上,生活着许多鼹鼠矿工,它们同属于潘多拉矿业公司哈利路 亚分公司.尽管在潘多拉星最美丽壮阔的地方工作,是一件十分让普通 ...

最新文章

  1. Python,OpenCV图像处理超好用的工具包imutils
  2. 使用leangoo实现多泳道看板任务
  3. VMware Vsphere4 资源分配与资源限制
  4. OpenCvSharp_FindContours函数参数详解
  5. Redis3.0.5配置文件详解
  6. Netty之实现一个简单的群聊系统
  7. Dockerd docker-containerd docker-containerd-shim runC
  8. linux 动态库构造函数,Linux共享库全局构造函数的相互依赖性
  9. 循环数组最大字段和(51Nod-1050)
  10. matlab合成音乐原理,matlab 做音乐合成
  11. 招兵买马,亚马逊再次补强人工智能
  12. utilities(matlab)—— minFunc
  13. Python常用模块实战之ATM和购物车系统再升级
  14. [Android] 【极其罕见】【安卓】视频转换器【支持18种格式转换!】
  15. 6大常见家谱样本,尤其第4个,深受各大名门望族的喜爱!
  16. 如何查看系统中的木马
  17. linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (一)
  18. apache的ab压力测试介绍
  19. C语言之#include用法详解
  20. CSS3 transform变形属性、2D变形、3D变形

热门文章

  1. java地址值每个字母,Java--------在控制台输入一句英语, 获得每个字母出现的次数...
  2. mywebsql java版_MyWebSQL|MySQL数据库管理软件(MyWebSQL)下载v3.7官方版 - 欧普软件下载...
  3. android 数字滚动抽奖_2020年会必备,Excel轻松制作抽奖小游戏
  4. 微型计算机最早提出于,计算机基础题1、世界上第一台电子计算机诞生于A)1943年B-查字典问答网...
  5. java中递归的概念_【Java】基础38:什么叫递归?
  6. python的知识点总结云分享_Python工程师面试必备25条Python知识点
  7. linux ftp非隔离模式,FTP实验报告非隔离用户的使用教案.doc
  8. java语言编程基础_Java编程基础02——Java语言基础
  9. android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备
  10. 五十六、Java的json解析库Json-lib和Gson