存档:

 #include <iostream>
#include <stdlib.h>
#include <sort.h>
#define maxsize 20
using namespace std;
int main()
{
sqlist l;
int num;
init(l);
create(l);
show(l);
cout<<"*******************************************"<<endl;
cout<<"1.直接插入排序"<<endl;
cout<<"2.冒泡排序"<<endl;
cout<<"3.简单选择排序"<<endl;
cout<<"4.输出表信息"<<endl;
cout<<"5.生成新的关键字序列"<<endl;
cout<<"6.退出"<<endl;
cout<<"*******************************************"<<endl;
cout<<"请输入您的选择:"<<endl;
cin.clear();
cin>>num;
while()
{
switch(num)
{
case :
insertsort(l);
break;
case :
bubblesort(l);
break;
case :
selectsort(l);
break;
case :
show(l);
break;
case :
create(l);
break;
case :
exit();
break;
default:
cout<<"输入错误!";
}
cout<<endl;
cout<<"请重新输入您的选择:"<<endl;
cin>>num;
}
return ;
}
 typedef struct
{
int key;
char *otherinfo;
}elemtype;//数据元素类型
typedef struct
{
elemtype r[maxsize];//存储空间的基地址
int length;//顺序表长度
}sqlist;//顺序表类型
void init(sqlist &l)//初始化
{
l.length=;
}
void create(sqlist &l)//创建表
{
int i,n;
cout<<"请输入数据个数,不超过"<<maxsize<<"个."<<endl;
cin>>n;//输入数据元素
cout<<"请输入待排序的数据:"<<endl;
while(n>maxsize)
{
cout<<"个数超过上限,不能超过"<<maxsize<<",请重新输入"<<endl;
cin>>n;
}
for(i=;i<=n;i++)
{
cin>>l.r[i].key;
l.length++;
}
}
void show(sqlist l)//输出显示
{
int i;
for(i=;i<=l.length;i++)
cout<<l.r[i].key<<" ";
cout<<endl;
}
void insertsort(sqlist l)//直接插入排序
{
int i,j;
for(i=;i<=l.length;i++)
{
if(l.r[i].key<l.r[i-].key)//"<",需将r[i]插入有序子表
{
l.r[]=l.r[i];//将待插入的记录暂存到监视哨中
l.r[i]=l.r[i-];//r[i-1]后移
for(j=i-;l.r[].key<l.r[j].key;j--)//从后向前寻找插入位置
l.r[j+]=l.r[j];//记录逐个后移,直到找到插入位置
l.r[j+]=l.r[];//将r[0]即原r[i],插入到正确位置
}
cout<<"第"<<i-<<"趟排序结果:";
show(l);
}
cout<<"直接插入排序最终结果为:";
show(l);
}
void bubblesort(sqlist l)//冒泡排序
{
int m,j,flag;
elemtype t;
m=l.length-;//共n-1趟冒泡
flag=;//flag用来标记某一趟排序是否发生交换,1表示交换,0表示未交换
while((m>)&&(flag==))
{
flag=;//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
for(j=;j<=m;j++)
{
if(l.r[j].key>l.r[j+].key)
{
flag=;//flag置为1,表示本趟排序发生了交换
t=l.r[j];
l.r[j]=l.r[j+];
l.r[j+]=t;//交换前后两个记录
}
}
cout<<"第"<<l.length-m<<"趟排序结果:";
show(l);
m--;
}
cout<<"冒泡排序最终结果为:";
show(l);
}
void selectsort(sqlist l)//简单选择排序
{
int i,j,k;
elemtype t;
for(i=;i<l.length;i++)
{
k=i;//在l.r[i...l.length]中选择关键字最小的记
for(j=i+;j<=l.length;j++)
{
if(l.r[j].key<l.r[k].key)
{
k=j;//k指向此趟排序中关键字最小的记
}
}
if(k!=i)//交换r[i]与r[k]
{
t=l.r[i];
l.r[i]=l.r[k];
l.r[k]=t;
}
cout<<"第"<<i<<"趟排序结果:";
show(l);
}
cout<<"简单选择排序最终结果为:";
show(l);
}

运行结果如下:

排序算法的实现(C/C++实现)的更多相关文章

  1. Python学习(三) 八大排序算法的实现(下)

    本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...

  2. 排序算法的实现之Javascript(常用)

    排序算法的实现之Javascript 话不多说,直接代码. 1.冒泡排序 1.依次比较相邻的两个数,如果前一个比后一个大,则交换两者的位置,否则位置不变 2.按照第一步的方法重复操作前length-1 ...

  3. 排序算法的实现(归并,快排,堆排,希尔排序 O(N*log(N)))

    今天跟着左老师的视频,理解了四种复杂度为 O(N*log(N))的排序算法,以前也理解过过程,今天根据实际的代码,感觉基本的算法还是很简单的,只是自己写的时候可能一些边界条件,循环控制条件把握不好. ...

  4. python排序算法的实现-插入

    1.算法: 设有一组关键字{ K 1 , K 2 ,…, K n }:排序开始就认为 K 1 是一个有序序列:让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列:然后让 K ...

  5. 各类排序算法的实现C#版

    using System;using System.CodeDom;using System.Collections.Generic;using System.Linq;using System.Ru ...

  6. 一起学Hadoop——二次排序算法的实现

    二次排序,从字面上可以理解为在对key排序的基础上对key所对应的值value排序,也叫辅助排序.一般情况下,MapReduce框架只对key排序,而不对key所对应的值排序,因此value的排序经常 ...

  7. 基于python的几种排序算法的实现

    #!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/3/28 10:26 # @Author : Yosef-夜雨声烦 # @Email ...

  8. Python之基本排序算法的实现

    import cProfile import random class SortAlgorithm: def __init__(self,unsortedlist=[]): self.unsorted ...

  9. 排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现

    以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数 ...

随机推荐

  1. 《高性能MySQL(第3版)》【PDF】下载

    内容简介 <高性能mysql(第3版)>是mysql 领域的经典之作,拥有广泛的影响力.第3版更新了大量的内容,不但涵盖了最新mysql5.5版本的新特性,也讲述了关于固态盘.高可扩展性设 ...

  2. 成功解决react+webpack打包文件过大的问题

    最近在学习并使用webpack+react+antd写了一个小项目,也可以说是demo,待全部开发完成后发现webpack的打包文件足足有将近13.3MB,快吓死宝宝了,经过连续几天的学习,和调试最后 ...

  3. 【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)

    package 彩票中奖码生成器; import java.util.Random; public class TestRandom { public static void main(String[ ...

  4. 下篇: php 微商城 基于Thinkphp3.2框架开发

    (12)微信商城 ① 前台模板引入 a.引入微信商城模板的css+js+Images+img+bootstrap b.引入微商城的首页index.html及详情页detail.html页面模板 注意: ...

  5. 后台返回数据事null时怎么进行判断

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  6. xCode8以及iOS10 的新特性

    其他:ios10中 适配问题(1.系统判断方法失效:2.隐私数据的访问问题:3.UIColor 问题4.真彩色的显示5.ATS问题6.UIStatusBar问题7.UITextField8.UserN ...

  7. iOS 数据加密方案

    iOS安全攻防(二十三):Objective-C代码混淆 提交用户的隐私数据 一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中 ...

  8. php-自动生成sql语句

    前两天学习到的知识,挺有用的,因此这里做个分享 function AutoCreateSql($tab,$dataarr,$mode='insert',$where=' 1 and 1 limit 1 ...

  9. fdisk 命令详解

    fdisk  作用: 查看磁盘实体使用情况,也可对硬盘分区. 选项:  -b 分区大小 -l  列出指定的外围设备的分区表状况 -s 分区编号, 将指定的分区大小输出到标准输出上, 单位为区块 -u ...

  10. find 命令详解

    find 作用:用于在文件树种查找文件,并作出相应的处理 (硬盘) 格式:find pathname -options [-print -exec -ok ...] 格式参数:pathname: fi ...