存档:

 #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. 《程序设计语言——实践之路》【PDF】下载

    程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...

  2. 为什么覆写equals()方法的时候总是要覆写hashcode()?

    要回答这个问题,我们应该先认识一下obj中的equals和hascode方法 1.equals()方法在obj中定义如下: public boolean equals(Object obj) { re ...

  3. signalr中Group 分组群发消息的简单使用

    前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...

  4. Git 企业开发者教程

      为什么要写这样一个面向企业开发者的Git教程?这个问题也困扰我自己很久.其实我使用git的时间也不短了,但是就和正在阅读本文的每一位一样,常用的基本就是那么几个(git clone, git pu ...

  5. <!--[if lte IE 8][endif] ]-->IE下判断IE版本的语句

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见 <!--[if lte IE 7]> <![endif]--> ...

  6. Kotlin——最详细的抽象类(abstract)、内部类(嵌套类)详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索QQ群号:497071402 进入正题 在前面几个章节中,详 ...

  7. shell日志删除(超容量&自动)

    背景:避免双十一磁盘被打爆,本想通过crontab执行,但是删除需要密码,所以用作当机器磁盘高于摸个阈值,进行无关性日志强删 #!/bin/sh #use #sh clean.sh wmporder_ ...

  8. 来一轮带注释的demo,彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

  9. java 类方法和实例方法 以及 类变量和实例变量

    类体中的方法分为实例方法和类方法两种,用static修饰的是类方法 类方法: 对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址.从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通 ...

  10. Struts2思维导图

    自己感觉自己的知识不是很扎实,所以昨天留时间复习知识,昨天边复习边画了一个思维导图.不知道自己画的对不对,还没有画完.有错的地方大家请和我说.希望自己能更加牢固的记住这些知识. 不说废话,开图.图有点 ...