数据结构——————排序算法代码实现(未完待续......)

【数据结构排序算法系列】数据结构八大排序算法 排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细的讲解。 写在前面的话:首先要明白在学习同类型的排序算法时,一定要明白任何相同领域存在的东西一定是竞争之后的结果,所以对于相同类型的排序之所以能够存在多种被人熟 阅读详情

排序算法

  • 插入排序
  • 折半插入排序
  • 希尔排序
  • 冒泡排序
  • 快速排序
  • 简单选择排序
  • 堆排序
  • 归并排序(未完成)
  • 基数排序(未完成)
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6+7;
int dt[MAXN], MOD = 1e9+7;
typedef struct
{
    int key;
    char *otherinfo;
}ElemType;
ElemType S[MAXN];
typedef struct
{
    ElemType *r;
    int length;
}SqList;

void InsertSort(SqList &L)//插入排序
{
    int i,j;
    for(i = 2; i <= L.length; ++i)
    {
        if(L.r[i].key<L.r[i-1].key)
        {
            L.r[0] = L.r[i];
            L.r[i] = L.r[i-1];
            for(j = i-1; L.r[0].key < L.r[j].key; --j)
                L.r[j+1] = L.r[j];
            L.r[j+1] = L.r[0];
        }
    }
}

void BInsertSort(SqList &L)//折半插入排序
{
    int i, j, low, hight, mid;

    for(i = 2; i <= L.length; ++i)
    {
        L.r[0] = L.r[i];
        low = 1; hight = i-1;
        while(low <= hight)
        {
            mid = (low+hight)/2;
            if(L.r[0].key < L.r[mid].key) hight = mid - 1;
            else    low = mid + 1;
        }
        for(j = i - 1; j >= hight+1; --j)
            L.r[j+1] = L.r[j];
        L.r[hight+1] = L.r[0];
    }
}

void ShellInsert(SqList &L, int dk)
{
    int i,j;
    for(i = dk + 1; i <= L.length; ++i)
    {
        if(L.r[i].key < L.r[i - dk].key)
        {
            L.r[0] = L.r[i];
            for(j = i - dk; j > 0 && L.r[0].key < L.r[j].key; j -= dk)
                L.r[j + dk] = L.r[j];
            L.r[j + dk] = L.r[0];
        }
    }
}

void ShellSort(SqList &L, int t)//希尔排序
{
    int k;
    for(k = t; k > 0; k = k/2)
        ShellInsert(L, k);

//    puts("ss");
}

void BubbleSort(SqList &L)//冒泡排序
{
    int j, m = L.length - 1, flag = 1;
    while((m > 0) && flag)
    {
        flag = 0;
        for(j = 1; j <= m; ++j)
            if(L.r[j].key > L.r[j+1].key)
            {
                flag = 1;
                ElemType t = L.r[j];
                L.r[j] = L.r[j+1];
                L.r[j+1] = t;
            }
            --m;
        }
}

int Partition(SqList &L,int low, int hight)
{
        L.r[0] = L.r[low];
        int pivotkey = L.r[low].key;
        while(low < hight)
        {
                while(low < hight && L.r[hight].key >= pivotkey)        --hight;
                L.r[low] = L.r[hight];
                while(low < hight && L.r[low].key <= pivotkey)          ++low;
                L.r[hight] = L.r[low];
        }
        L.r[low] = L.r[0];
        return low;
}
void QSort(SqList &L, int low, int hight)
{
        if(low < hight)
        {
                int pivotloc = Partition(L, low, hight);
                QSort(L, low, pivotloc - 1);
                QSort(L, pivotloc + 1, hight);
        }
}
void QuickSort(SqList &L)//快速排序
{
        QSort(L,1,L.length);
}

void SelectSort(SqList &L)//简单选择排序
{
        for(int i = 1; i < L.length; ++i)
        {
                int k = i;
                for(int j = i + 1; j <= L.length; ++j)
                        if(L.r[j].key < L.r[k].key)
                                k = j;
                if(k != i)
                {
                        ElemType t = L.r[i];
                        L.r[i] = L.r[k];
                        L.r[k] = t;
                }
        }
}

void HeapAdjust(SqList &L, int s,int m)//调整为大根堆
{
        ElemType rc = L.r[s];
        for(int j = 2 * s; j <= m; j *= 2)
        {
                if(j < m && L.r[j].key < L.r[j+1].key)          ++j;
                if(rc.key >= L.r[j].key)                        break;
                L.r[s] = L.r[j];
                s =  j;
        }
        L.r[s] = rc;
}
void CreatHeap(SqList &L)//建初堆
{
        int  n = L.length;
        for(int i = n/2; i > 0; --i)
                HeapAdjust(L,i,n);
}
void HeapSort(SqList &L)//堆排序
{
        CreatHeap(L);
        for(int i = L.length; i > 1; --i)
        {
                ElemType x =L.r[1];
                L.r[1] = L.r[i];
                L.r[i] = x;
                HeapAdjust(L,1,i-1);
        }
}

void Merge(ElemType R[], ElemType T[], int low, int mid, int high)
{
        int i = low, j = mid + 1, k = high;
        while(i <= mid && j <= high)
        {
                if(R[i].key <= R[j].key)        T[k++] = R[i++];
                else                            T[k++] = R[j++];
        }
        while(i <= mid)  T[k++] = R[i++];
        while(j <= high) T[k++] = R[j++];
}

void MSort(ElemType R[], ElemType T[], int low, int high)
{
        if(low == high) T[low] = R[low];
        else
        {
                int mid = (low + high)/2;
                MSort(R, S, low,   mid );
                MSort(R, S, mid+1, high);
                Merge(S, T, low, mid, high);
        }
}
void MergeSort(SqList &L)
{

        MSort(L.r, L.r, 1, L.length);
}

void menu()
{
        cout<< " 1.插入排序\n"\
               " 2.折半插入排序\n"\
               " 3.希尔排序\n"\
               " 4.冒泡排序\n"\
               " 5.快速排序\n"\
               " 6.简单选择排序\n"\
               " 7.堆排序\n"\
               " 8.归并排序(未完成)\n"\
               " 9.基数排序(未完成)\n"\
               " 0.退出\n"<<endl;
}

int main()
{
        clock_t s,e;
        s = clock();
        /*正式程序*/
        ios::sync_with_stdio(0);
        SqList L;
        L.r = new ElemType[MAXN];
        int choose;
        int x = (int)1000;
        cout<<"请选择:"<<endl;
        menu();
        cin>>choose;

        while(choose)
        {
                cout<<"请输入随机生成的数据个数:";
                cin>>x;
                MOD = x*10+7;
                srand(time(NULL));
                L.length = x;
                for(int i=1; i <= L.length; ++i)
                        L.r[i].key = (rand()*rand()-rand()*2 + MOD )%MOD;
                cout<<"数据生成完毕,请问是InsertSort否要查看:Y/N"<<endl;
                char ch;
                cin>>ch;
                if(ch == 'Y' || ch == 'y')
                {
                        cout<<"数据如下所示;"<<endl;
                        for(int i = 1; i <= L.length; ++i)
                                cout<<L.r[i].key<<" ";
                        cout<<endl<<endl;
                }
                cout<<"排序之后数据为:"<<endl;
                s = clock();
                switch (choose)
                {
                        case 1:InsertSort(L);break;
                        case 2:BInsertSort(L);break;
                        case 3:ShellSort(L, L.length);break;
                        case 4:BubbleSort(L);break;
                        case 5:QuickSort(L); break;
                        case 6:SelectSort(L);break;
                        case 7:HeapSort(L);  break;
                        case 8:  break;
                        case 9:  break;
                }
                for(int i = 1; i <= L.length; ++i)
                        cout<<L.r[i].key<<" ";
                e = clock();

                /**输出程序运行时间*****/
                cout<<endl;
                cout<<"程序运行时间:"<<e - s<<"(ms)"<<endl<<endl;
                cout<<"****************************************************"<<endl;
                cout<<"请选择:"<<endl;
                menu();
                cin>>choose;
        }
        return 0;
}

数据结构-实验四 排序算法的实现 广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼417)     2018年06月13日 学院 计算机科学与教育软件学院 年级、专业、班 网络161 姓名 卟咚君 学号 1606100*** 实验课程... 阅读详情

相关推荐

数据结构中十大排序算法 详解

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

Hanshy123的博客 1762

python 高阶函数之自定义排序

自定义排序函数本文参考慕课网廖学峰老师的视频教程整理而来。Python内置的 sorted()函数可对list进行排序:>>>sorted([36, 5, 12, 9, 21])[5, 9, 12, 21, 36]但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排

adamlovejw的专栏 4581

【数据结构之排序算法】

数据结构学习笔记之8大排序算法,直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序图文详解。

m0_69455439的博客 1174

python3 自定义排序函数_Python自定义排序函数

Python内置的 sorted()函数可对list进行排序:>>> sorted([36, 5, 12, 9, 21])[5, 9, 12, 21, 36]可以看到,sorted()函数,默认是由小到大排序列表的元素。>>> score = [('Alice', 72), ('Candy', 90), ('Bob', 62)]>>> sort...

weixin_32206303的博客 2055

概率论与数理统计基础概念与重要定义汇总

文章目录一、随机事件和概率1:互斥,对立,独立事件的定义和性质。2:概率,条件概率和五大概率公式3:古典型,几何型概率和伯努利试验 一、随机事件和概率 1:互斥,对立,独立事件的定义和性质。 互斥事件\color{red}\textbf{互斥事件}互斥事件 事件A和B的交集为空,A与B就是互斥事件,也叫互不相容事件。也可叙述为:不可能同时发生的事件。如A∩B为不可能事件(A∩B=Φ),那么称事件A与事件B互斥,其含义是:事件A与事件B在任何一次试验中不会同时发生。 则P(A+B)=P(A)+P(B)(这个公

csyifanZhang的博客 1万+

华为昇腾服务器npu中安装paddle,pytorch等环境,训练代码迁移适配等问题记录

参考文档:https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/npu/README_cn.md

qq_29220369的博客 4112

python不用sort排序_Python排序之sort&sorted

1 首先,Python中sort与sorted的区别:python中列表的内置函数sort()可以对列表中的元素进行排序,sort()函数是内置函数,会改变当前对象;而全局性的sorted()函数则对所有可迭代的序列都是适用的,sorted()函数只会返回一个排序后的当前对象的副本,而不会改变当前对象。2 sort()排序2.1对列表进行简单排序 1 升序排列 a = [2,9,5,6,7,8] ...

weixin_31884143的博客 1669

树莓派5搭建ROS1开发环境:从系统安装到环境变量配置

本文详细指导如何在树莓派5上搭建ROS1开发环境。针对树莓派OS非标准安装路径导致的常见CMake报错问题,提供了从系统烧录、一键安装ROS到关键环境变量配置的完整解决方案,确保工作空间能成功编译,助力机器人项目开发。

weixin_29159127的博客 385

用c语言编写一个排序函数,c语言 编写一个排序函数,实现对主函数中数组的升序排序....

满意答案lsdiddepl91推荐于 2017.05.23采纳率:48%等级:10已帮助:319人经典的两个排序:(1)选择排序#include main(){int a[5];int i,j,k,t;for (i=0;i<5;i++)scanf("%d",&a[i]);for (i=0;i<4;i++){k=i;for(j=i+1;j<5;j++)if(a[k]...

weixin_34357614的博客 5487

一种白平衡增益计算中白点权重计算简易实现方式

一种白平衡白点距离权重简易实现方式

大熊 384

利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案

tokenizer将输入的文本列表texts转换为 PyTorch 张量,同时进行填充和截断操作,以确保所有输入具有相同的长度。对输入进行推理,得到模型的输出。对模型的最后一层隐藏状态求平均,得到每个文本的向量表示。.numpy()将 PyTorch 张量转换为 NumPy 数组。使用DBSCAN算法对文本向量进行聚类。eps是邻域半径,是形成核心点所需的最小样本数。fit方法对输入的向量进行聚类,并返回每个样本所属的簇标签。try:定义了一个 POST 请求的 API 路由,路径为。

AI的内部世界的博客 1069

python中自定义排序函数

Python内置的sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y ...

aa150602的博客 373

如何用libwebsocket库在stm32F407上实现websocket客户端?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1135

【数据结构】十大排序算法C++实现

参考 数据结构十大排序算法讲解:算法原理和LeetCode代码实现(C++,java) 【数据结构】十大排序算法—— C++实现<全> 十大经典排序算法(C++实现)

qq_42147969的博客 8469

19、多项式基算术:原理与运算详解

本文深入探讨了有限域 $GF(2^m)$ 中的多项式基算术,详细介绍了加法、减法、乘法和平方运算的原理与实现方法。重点分析了多项式基表示形式、模约简技术以及乘法优化策略,如高基数乘法、并行与顺序乘法器设计,并提到了Karatsuba-Ofman算法在减少乘法次数方面的优势。此外,文章还讨论了多项式基算术在密码学、编码理论等领域的应用前景,并展望了未来在高效算法设计与硬件加速方面的研究方向。

yellow的专栏 150

YOLOv8改进 | 注意力篇 | YOLOv8引入EMAttention(EMA)注意力

具体来说,除了对全局信息进行编码以重新校准每个并行分支中的通道权重之外,还通过跨维度交互来进一步聚合两个并行分支的输出特征,以捕获像素级的成对关系。3. 跨空间学习:除了在每个并行子网络中建立局部的跨通道交互外,EMA模块还通过跨空间学习方法融合了两个并行子网络的输出特征图。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv8改进有效涨点专栏,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 896

数据结构中常见的几种排序算法

    数据结构中常见的几种排序算法 快速排序 目录 数据结构中常见的几种排序算法 快速排序 插入排序 希尔排序 归并排序 堆排序 选择排序 冒泡排序 基数排序 快速排序 基本思想: 基准分割法  a) 通过一趟排序将要排序的数据分割成独立的两部分其中一部分所有的数据要比另外的一部分数据都要小  b) 按照此方法对这两部分数据进行快速排序  案例:3 6...

qq_39380590的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

排序算法(一)之冒泡排序(Python代码实现)

目录 一:排序算法介绍及算法的稳定性概念 (一):排序算法的定义 (二):排序算法的稳定性 二:冒泡排序算法 (一):冒泡排序算法概念 (二):冒泡排序的分析 (三):冒泡排序Python实现 (四):算法时间复杂度分析 (五):冒泡排序的动态图演示 数据结构和算法分析的文章: 算法与数据结构(一):算法效率的衡量 算法与数据结构(二):线性表(包括代码实现) 算法与数据...

qq_39820671的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【数据结构】八大排序之简单选择排序算法

数据结构基本选择排序算法之简单选择排序详解.内容包括:简单选择排序的简介及实现思路,代码实现,优化,算法的时间复杂度分析.

C/C++领域,数据结构,linux,MySQl学习者 3086

数据结构实验六 排序算法的实现

数据结构实验六 排序算法的实现(冒泡、选择、快速排序)。本篇内容为数据结构实验系列完结篇。

Code_流苏:在代码中寻诗意,在实践中觅真知 3132

数据结构与算法必备的 50 个代码实现。

数据结构和算法是程序员的内功心法和基本功。无论是人工智能还是其它计算机科学领域,掌握扎实的数据结构和算法知识,往往会助力不少!今天给大家推荐一份不错的数据结构与算法资源。特点是:全代码实现!这份资源的作者王争老师是前 Google 工程师,5 万+人跟着学的《数据结构和算法之美》专栏作者。他总结了程序员必备的 50 个数据结构与算法,以及相应的代码实现。开源地址为:https...

weixin_33859504的博客 5805

【数据结构】排序算法总结及代码实现

我们通常说的排序算法指的是内部排序算法,即数据在内存中进行排序。 首先先来看一下我们学过的排序都有什么? 排序可以大的方面分为比较排序和非比较排序? 比较排序有: 1、冒泡排序 2、选择排序 3、插入排序 (1)二分插入排序 (2)希尔排序 4、归并排序 5、堆排序 6、快速排序 非比较排序有: 1、计数排序 2、基数排序 3、桶排序 我们先对各种排序进行对比: ...

如风逝去 1万+

【数据结构】之排序算法综合篇

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.csdn.net/smile_running 数据结构课程的内容基本忘光了,所以又拾起数据结构与算法的书本,重新学习了一边排序算法的原理和实现,在经过几个晚上的努力,终于把这几种排序算法给搞明白了,下...

你若盛开,蜜蜂自来 7662

【数据结构与算法】Java实现七大排序算法汇总

凿壁偷光,8000字总结Java实现七大排序算法!

冲击大厂之路!!! 2617

数据结构-十大排序算法

十大排序算法分别是直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、外部排序。其中插入排序包括直接插入排序、折半插入排序、希尔排序;交换排序包括冒泡排序、快速排序;选择排序包括简单选择排序、堆排序。

致大尽微 家国天下 4386

【数据结构】排序算法的代码实现

常见的排序算法

2301_77003537的博客 204
上一篇: Dijkstra算法实现——————数据结构作业
下一篇: HDU 6181Two Paths——————(求次短路)
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值