排序算法的实现(C/C++实现)
存档:
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++实现)相关推荐
- 十一大排序算法的实现
十一大排序算法的实现 前言 终于写完了,九大排序算法亲自打一遍,给自己加深印象,算是一种模板,留给自己以后用,也分享给大家. U p d a t e : Update: Update: 2020.12 ...
- 数组的几种排序算法的实现(1)
数据结构中的排序算法,各有用处,比如: 1,直接插入排序,在序列基本有序的情况下,移动的次数比较少,但是比较次数是一样的 复杂度O(n*n); 2,冒泡排序,这个不用说了吧,刚学C的人都懂了 3,希尔 ...
- 【swjtu】数据结构实验9_多种排序算法的实现
实验内容及要求: 输入n个整数,分别用希尔排序.快速排序.堆排序和归并排序实现由小到大排序并输出排序结果.要求n=10,15,20进行三组排序实验. 实验目的: 掌握希尔排序.快速排序.堆排序.归并排 ...
- Java基础学习总结(28)——Java对各种排序算法的实现
2019独角兽企业重金招聘Python工程师标准>>> 这里总结下各种排序算法的java实现 冒泡排序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- C++——《数据结构与算法》实验——排序算法的实现
问题描述 1) 动态输入一组数字序列; 2)实现直接插入排序.简单选择排序.冒泡排序.快速排序算法; 3)在主函数中,依次测试上述算法. 类型定义 #define MAX SIZE 100 typed ...
- Python之十大经典排序算法的实现和原理
一.冒泡排序 冒泡排序(Bubble Sort)是一种比较简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把它们调换过来,直到没有元素再需要交换,排序完成. 冒泡 ...
- 数据结构实验四 排序算法的实现
广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416) 2019年6月4日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项 ...
- java 排序算法面试题_面试题: java中常见的排序算法的实现及比较
1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻 ...
- 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...
最新文章
- (曲率系列3:)PCL:PCL库中的两种曲率表示方法pcl::NormalEstimation和PrincipalCurvaturesEstimation
- Mac OS X 下Node.js开发环境的搭建
- HDU 4166 BNU 32715 Robot Navigation (记忆化bfs)
- ubuntu16.04 + Kdevelop + ROS开发
- nexus 7 arm linux,Nexus 7安装Ubuntu Touch
- pytorch选出数据中的前k个最大(最小)值及其索引
- 我也发软件开发团队的思考(侧重点是人员)
- BZOJ 1878: [SDOI2009]HH的项链【莫队】
- linux开源视频监控软件,Linux开源智能视频监控软件zoneminder的安装
- 6678学习笔记开篇
- dk 图解计算机科学pdf,DK英语:7套DK经典图解词典,再也不用死记硬背了!
- LEAK: ByteBuf.release() was not called before it‘s garbage-collected
- HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
- java remove removeat_Java PriorityQueue删除任意元素的性能
- 关于html,body{height:100%}的理解
- python tkinter如何隐藏控件
- Visual Studio Community 2019 安装
- 程序员真的都不爱炫富吗?
- 程序语言Python Tutorial(一):激发你的欲望 程序语言
- 红旗Linux11安装教程,使用U盘制作红旗Linux 11桌面系统Live CD启动盘的方法