存档:

 1 #include <iostream>
 2 #include <stdlib.h>
 3 #include <sort.h>
 4 #define maxsize 20
 5 using namespace std;
 6 int main()
 7 {
 8     sqlist l;
 9     int num;
10     init(l);
11     create(l);
12     show(l);
13     cout<<"*******************************************"<<endl;
14     cout<<"1.直接插入排序"<<endl;
15     cout<<"2.冒泡排序"<<endl;
16     cout<<"3.简单选择排序"<<endl;
17     cout<<"4.输出表信息"<<endl;
18     cout<<"5.生成新的关键字序列"<<endl;
19     cout<<"6.退出"<<endl;
20     cout<<"*******************************************"<<endl;
21     cout<<"请输入您的选择:"<<endl;
22     cin.clear();
23     cin>>num;
24     while(1)
25     {
26         switch(num)
27         {
28             case 1:
29                 insertsort(l);
30                 break;
31             case 2:
32                 bubblesort(l);
33                 break;
34             case 3:
35                 selectsort(l);
36                 break;
37             case 4:
38                 show(l);
39                 break;
40             case 5:
41                 create(l);
42                 break;
43             case 6:
44                 exit(0);
45                 break;
46             default:
47                 cout<<"输入错误!";
48         }
49         cout<<endl;
50         cout<<"请重新输入您的选择:"<<endl;
51         cin>>num;
52     }
53     return 0;
54 }

  1 typedef struct
  2 {
  3     int key;
  4     char *otherinfo;
  5 }elemtype;//数据元素类型
  6 typedef struct
  7 {
  8     elemtype r[maxsize];//存储空间的基地址
  9     int length;//顺序表长度
 10 }sqlist;//顺序表类型
 11 void init(sqlist &l)//初始化
 12 {
 13     l.length=0;
 14 }
 15 void create(sqlist &l)//创建表
 16 {
 17     int i,n;
 18     cout<<"请输入数据个数,不超过"<<maxsize<<"个."<<endl;
 19     cin>>n;//输入数据元素
 20     cout<<"请输入待排序的数据:"<<endl;
 21     while(n>maxsize)
 22     {
 23         cout<<"个数超过上限,不能超过"<<maxsize<<",请重新输入"<<endl;
 24         cin>>n;
 25     }
 26     for(i=1;i<=n;i++)
 27     {
 28         cin>>l.r[i].key;
 29         l.length++;
 30     }
 31 }
 32 void show(sqlist l)//输出显示
 33 {
 34     int i;
 35     for(i=1;i<=l.length;i++)
 36         cout<<l.r[i].key<<"  ";
 37     cout<<endl;
 38 }
 39 void insertsort(sqlist l)//直接插入排序
 40 {
 41     int i,j;
 42     for(i=2;i<=l.length;i++)
 43     {
 44         if(l.r[i].key<l.r[i-1].key)//"<",需将r[i]插入有序子表
 45         {
 46             l.r[0]=l.r[i];//将待插入的记录暂存到监视哨中
 47             l.r[i]=l.r[i-1];//r[i-1]后移
 48             for(j=i-2;l.r[0].key<l.r[j].key;j--)//从后向前寻找插入位置
 49                 l.r[j+1]=l.r[j];//记录逐个后移,直到找到插入位置
 50             l.r[j+1]=l.r[0];//将r[0]即原r[i],插入到正确位置
 51         }
 52         cout<<"第"<<i-1<<"趟排序结果:";
 53         show(l);
 54     }
 55     cout<<"直接插入排序最终结果为:";
 56     show(l);
 57 }
 58 void bubblesort(sqlist l)//冒泡排序
 59 {
 60     int m,j,flag;
 61     elemtype t;
 62     m=l.length-1;//共n-1趟冒泡
 63     flag=1;//flag用来标记某一趟排序是否发生交换,1表示交换,0表示未交换
 64     while((m>0)&&(flag==1))
 65     {
 66         flag=0;//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
 67         for(j=1;j<=m;j++)
 68         {
 69             if(l.r[j].key>l.r[j+1].key)
 70             {
 71                 flag=1;//flag置为1,表示本趟排序发生了交换
 72                 t=l.r[j];
 73                 l.r[j]=l.r[j+1];
 74                 l.r[j+1]=t;//交换前后两个记录
 75             }
 76         }
 77         cout<<"第"<<l.length-m<<"趟排序结果:";
 78         show(l);
 79         m--;
 80     }
 81     cout<<"冒泡排序最终结果为:";
 82     show(l);
 83 }
 84 void selectsort(sqlist l)//简单选择排序
 85 {
 86     int i,j,k;
 87     elemtype t;
 88     for(i=1;i<l.length;i++)
 89     {
 90         k=i;//在l.r[i...l.length]中选择关键字最小的记
 91         for(j=i+1;j<=l.length;j++)
 92         {
 93             if(l.r[j].key<l.r[k].key)
 94             {
 95                 k=j;//k指向此趟排序中关键字最小的记
 96             }
 97         }
 98         if(k!=i)//交换r[i]与r[k]
 99         {
100             t=l.r[i];
101             l.r[i]=l.r[k];
102             l.r[k]=t;
103         }
104         cout<<"第"<<i<<"趟排序结果:";
105         show(l);
106     }
107     cout<<"简单选择排序最终结果为:";
108     show(l);
109 }

运行结果如下:

转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/7999908.html

排序算法的实现(C/C++实现)相关推荐

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

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

  2. 数组的几种排序算法的实现(1)

    数据结构中的排序算法,各有用处,比如: 1,直接插入排序,在序列基本有序的情况下,移动的次数比较少,但是比较次数是一样的 复杂度O(n*n); 2,冒泡排序,这个不用说了吧,刚学C的人都懂了 3,希尔 ...

  3. 【swjtu】数据结构实验9_多种排序算法的实现

    实验内容及要求: 输入n个整数,分别用希尔排序.快速排序.堆排序和归并排序实现由小到大排序并输出排序结果.要求n=10,15,20进行三组排序实验. 实验目的: 掌握希尔排序.快速排序.堆排序.归并排 ...

  4. Java基础学习总结(28)——Java对各种排序算法的实现

    2019独角兽企业重金招聘Python工程师标准>>> 这里总结下各种排序算法的java实现 冒泡排序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  5. C++——《数据结构与算法》实验——排序算法的实现

    问题描述 1) 动态输入一组数字序列; 2)实现直接插入排序.简单选择排序.冒泡排序.快速排序算法; 3)在主函数中,依次测试上述算法. 类型定义 #define MAX SIZE 100 typed ...

  6. Python之十大经典排序算法的实现和原理

    一.冒泡排序 冒泡排序(Bubble Sort)是一种比较简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把它们调换过来,直到没有元素再需要交换,排序完成. 冒泡 ...

  7. 数据结构实验四 排序算法的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416)     2019年6月4日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项 ...

  8. java 排序算法面试题_面试题: java中常见的排序算法的实现及比较

    1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻 ...

  9. 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)

    目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...

最新文章

  1. (曲率系列3:)PCL:PCL库中的两种曲率表示方法pcl::NormalEstimation和PrincipalCurvaturesEstimation
  2. Mac OS X 下Node.js开发环境的搭建
  3. HDU 4166 BNU 32715 Robot Navigation (记忆化bfs)
  4. ubuntu16.04 + Kdevelop + ROS开发
  5. nexus 7 arm linux,Nexus 7安装Ubuntu Touch
  6. pytorch选出数据中的前k个最大(最小)值及其索引
  7. 我也发软件开发团队的思考(侧重点是人员)
  8. BZOJ 1878: [SDOI2009]HH的项链【莫队】
  9. linux开源视频监控软件,Linux开源智能视频监控软件zoneminder的安装
  10. 6678学习笔记开篇
  11. dk 图解计算机科学pdf,DK英语:7套DK经典图解词典,再也不用死记硬背了!
  12. LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  13. HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
  14. java remove removeat_Java PriorityQueue删除任意元素的性能
  15. 关于html,body{height:100%}的理解
  16. python tkinter如何隐藏控件
  17. Visual Studio Community 2019 安装
  18. 程序员真的都不爱炫富吗?
  19. 程序语言Python Tutorial(一):激发你的欲望 程序语言
  20. 红旗Linux11安装教程,使用U盘制作红旗Linux 11桌面系统Live CD启动盘的方法

热门文章

  1. IE与Cognos的那些事
  2. 豆瓣/name-?P=0/事件
  3. Facebook开源Torchnet,加速AI研究
  4. Confluence 6 如何保持我空间的整洁
  5. Eclipse 教程
  6. LightOJ - 1098 A New Function
  7. Mac下一台电脑管理多个SSH KEY(转)
  8. CentOS 6.5 部署 Horizon
  9. 集群瓶颈为什么是磁盘io
  10. 网页制作中的背景处理