存档:

 #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. Windows as a Service(4)——使用Intune管理Windows10更新

    这是这个系列的最后一篇文章,我已经花了三篇的篇幅和大家分享有关于Windows as a Serivce的相关内容,链接如下: Windows as a Service(1)-- Windows 10 ...

  2. .net中如何实现多线程

    l线程肯定也是要执行一段代码的.所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码.(找个人来做一件事情) l线程启动时,通过委托调用该方法. (委托的好处) ...

  3. useradd 命令 及 相关文件解读

    翻译自 man useradd 名称: 创建新用户或更新默认的新用户信息 快照:useradd -D 描述: 在不加-D参数调用时,useradd命令使用指定的参数和系统的默认值来创建新账户. 取决于 ...

  4. 防盗链与token运用

    为什么要防盗链? 例如手机/PC应用,如果有人知道你的api地址,和应用格式,那么他人就可以利用这个接口进行盗链:盗取/盗用里面的数据. 防盗链特性: 1.因为是非开放性的,所以所有的接口都是封闭的, ...

  5. 手动编译protobuf3的C++源码

    Windows下编译 官方文档 第三方文档 准备工具 Visual Studio 2013 CMake https://cmake.org/ Git https://git-scm.com/ 需要注意 ...

  6. (转)top关键字与top表达式(SQLServer)

    SQLServer 中,top也很有用,例如查询部分数据,还可以用表达式.其语法如下: SELECT TOP number|percent column_name(s) FROM table_name ...

  7. react看这篇就够了(react+webpack+redux+reactRouter+sass)

    本帖将对一下内容进行分享: 1.webpack环境搭建: 2.如何使用react-router: 3.引入sass预编译: 4.react 性能优化方案: 5.redux结合react使用: 6.fe ...

  8. Keep Mind Working

    想找一个这样的地方,可以让脑袋持续运转着.不会像游戏一样让人着迷,不会像有色电视一样让人想错地方,也不会像工作一样充满太多严密.就是让脑袋继续转着,适意地思考些什么. 之前会跑去游戏里,至少没有太污. ...

  9. lambda 与内置函数,以及一些补充

    插播几条小知识: 1. lambda 表达式 对于简单的函数,我们可以用 lamdba 表达式来执行,一句话就够用

  10. c#实现超实用的<证件照换底色>小工具

    1前言     我们在工作和生活中经常要填写一些个人资料,这时候往往需要放证件照上去,但是有时候人家要求是红底或白底,但是偏偏不巧的是你以前照了张蓝底的.这时候你想换个底色,于是在百度上一搜“证件照换 ...