存档:

 #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. 1.移植uboot-分析uboot启动流程(详解)

    本节总结: uboot启动流程如下: 1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率   (FCLK:HCLK:PCLK=1:2:4,FCLK=120Mhz) 5)关mmu,初始 ...

  2. React的JSX语法及组件

    最近一个同事很急没有做任何交接就请了陪产假,然后我来维护.说实在的我一开始是一脸懵逼的.因为MV*项目里用的最多的还是Vue:React听说也了解过,但毕竟不熟... 不过不管如何这也是工作:同事也恭 ...

  3. bzoj 3669: [Noi2014] 魔法森林 LCT版

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  4. Selinux安全机制

    1.Selinux安全机制简介 Selinux是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制.而SELinux则是由美国NSA(国安局)和一些公司(R ...

  5. java 修饰符之修饰范围

    不同修饰符有不同修饰范围,为了对修饰符有更明确的认识,使用表格总结. 抽象\关键字 public protected private static final abstract default 类 √ ...

  6. 开发中关于Git那些事(续:Git变基)

    其实上一篇写的内容仅仅是Git的冰山一角,如果你认为Git就是简简单单的几行命令,那只能说明你还没有真正了解Git这个强大的内容寻址文件系统.这篇文章,还是接着介绍一些实用但是很少有人知晓的一些命令, ...

  7. 第一个Vue插件从封装到发布

    前言 这是我封装的第一个Vue插件,实现的功能是滑动选择省市区,虽然只是一个简单的插件,但还是挺开心的,记录一下步骤. 插件地址:https://github.com/leichangchun/vue ...

  8. window.location.hash 使用说明

    本文给大家详细汇总了关于window.location.hash的知识点,属性以及用法等等,非常的实用,并附上了例子,有需要的小伙伴可以参考下.   location是javascript里边管理地址 ...

  9. Ruby学习之代码块

    代码块在其他的语言中都或多或少接触过一些,如perl中sort{$a<=>$b}keys,传入代码块实现按数值排序,在swift中用到闭包,更加深入学习到training closure. ...

  10. java多线程(一)-概述

    最近这段在看java多线程编程方面的东西.所以特写了几篇文章,来总结和回顾一下自己所学习到的相关知识.因为水平有限,文章中总结不全面甚至理解错误的地方,欢迎读者指点批评. 我们平时所接触到的程序,都是 ...