存档:

 #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. 《编程人生:15位软件先驱访谈录》【PDF】下载

    <编程人生:15位软件先驱访谈录>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382231 内容简介 本书适合所有程序员,也适合 ...

  2. React学习总结(一)

    React学习总结 一.什么是React? 是Facebook公司开发的一套JS库 React的详细介绍https://www.jianshu.com/p/ae482813b791 二.老版本Reac ...

  3. Git安装和使用(谨记)

    刚开始用git的小白适用,,转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下 ...

  4. Java 哲学家进餐

    某次操作系统实验存档.V 这个哲学家除了吃就知道睡.( ╯□╰ ) 哲学家.java: package operating.entity.philosophyeating; import operat ...

  5. NIO中的易筋经

    匠心零度 转载请注明原创出处,谢谢! 前言 <易筋经>.天下武功出少林,而易筋经是少林寺的镇寺之宝.学好了易筋经就可以轻易地学好其它武功,只不过很少人学到了它的全部精髓.游坦之只是碰巧学了 ...

  6. 使用line-height来垂直居中在安卓设备并不居中,利用ji调整

    先判断智能机浏览器的版本信息:方法有两种,但是第一种兼容性更好,但是使用了device插件 第一种: if (device.android()){ } 第二种: var ua = navigator. ...

  7. a 标签的四种样式

    在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访问状态,和鼠标悬停状态.分别如下设置: a:link {color: red} /* 未访问 ...

  8. K:正则表达式之进阶

    子表达式: 前面所介绍的关于重复匹配的知识,其重复匹配的字符只作用于紧挨着的前一个字符而言,而有时候要将一个集体(姑且用该概念进行称呼)进行重复多遍的进行匹配,则使用前面所介绍的知识,其是无法做到的. ...

  9. redis资料收集

    http://www.runoob.com/redis/redis-sets.html  redis set 使用 https://www.cnblogs.com/wanzaixiaoxin/p/49 ...

  10. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug

    前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...