sorting - merge sort

高级数据库二十:并行JOIN算法(Sorting) Parallel Join Algorithms (Sorting) 背景 关于Join的其他背景可以查看上一篇讲Hash Join的文章。 SINGLE INSTRUCTION, MULTIPLE DATA (SIMD) 有一系列的CPU指令允许处理器同时在多个数据点上执行相同的操作。 目前的AMD和Intel CPU均具有ISA和微体系结构,支持SIMD操作。 优点: 阅读详情
#include "stdio.h"
#include "string.h"

#define MAX_LIST 50


typedef struct _SqList {
    int data[MAX_LIST];
    int length;
}SqList;

enum MERGE_SORT_METHOD { RECURSE, ITERATE };

void Merge( int src[], int dst[], int start, int middle, int end)
{
    int j, k;
    for( k = start, j = middle + 1; start <= middle && j <= end; k++   )
    {
        if( src[start] < src[j] )
            dst[k] = src[start++];
        else
            dst[k] = src[j++];      
    }

    while( start <= middle ) dst[k++] = src[start++];
    while( j <= end ) dst[k++] = src[j++];      
}

void MSort( int src[], int dst[], int start, int end )
{
    if( start == end )
        dst[start] = src[start];
    else{
        int middle = (start + end)/2;
        int buf[MAX_LIST];
        MSort(src, buf, start, middle);
        MSort(src, buf, middle+1, end);
        Merge(buf, dst, start, middle, end );
    }
}
void MergeSortRecursive( SqList* L )
{
     MSort( L->data, L->data, 0, L->length-1 );
}

void MergePiecewise( int src[], int dst[], int piece, int count )
{
    int i = 0;
    while( i < count - 2*piece + 1)
    {
        Merge( src, dst, i, i+piece-1, i+2*piece-1);
        i += 2*piece;
    }   
    if( i < count -  piece + 1 )
        Merge( src, dst, i, i + piece - 1, count-1);
    else
        while( i < count )
            dst[i] = src[i++];
}
void MergeSortIterative( SqList* L )
{
    int buf[MAX_LIST];

    int block = 1;
    while( block < L->length )
    {
        MergePiecewise( L->data, buf, block, L->length  );
        block *= 2;
        MergePiecewise( buf, L->data, block, L->length );
        block *= 2;
    }
}

void MergeSort( SqList* L, MERGE_SORT_METHOD ms )
{
    if( ms == RECURSE )
        MergeSortRecursive( L );
    else
        MergeSortIterative( L );
}

int main()
{
    SqList d;
    int intarr[] = {1,10,23,48,65,31,-21,9,88,100};
    printf("array length is %d\n", sizeof(intarr));
    memcpy( d.data, intarr, sizeof(intarr));
    d.length = sizeof(intarr)/sizeof(int);  
    int index = 0;
    for( ; index < d.length; index++ )
        printf(" %d", d.data[index] );
    printf("\nMerge sort...\n");
    MergeSort( &d, RECURSE );
    for( index = 0; index < d.length; index++ )
        printf(" %d", d.data[index] );
    printf("\n");
    return 0;
}
归并排序(MergeSort) 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 若将两个有序表合并成一个有序表,称为二路归并。   1,算法描述 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 第三步:比较两个指针所 阅读详情

相关推荐

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 712

归并排序(C语言简单实现)

归并排序(C语言简单实现) 归并排序(Merging Sort)利用的就是归并的思想实现的排序方法。原理是:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列;再两两归并,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序 。 递归 每次都将序列分一半,比如一个数组有18个数,那么第一次分出1-9和10-18,然后分别对两组继续分半,直到最后剩下一个元素时,即分好了组(此时全都是最小的组,只含一个元

DFGOMC的博客 7897

使用 DEM 模拟金属烧结过程

了解离散元素法 (DEM) 如何彻底改变烧结工艺,提高制造业的效率和精度。

jkh920184196的博客 1126

七种排序--------归并排序(Merging Sort)

归并排序就是利用归并的思想实现的排序方法。他的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2] (整数)个长度为2或1的有序子序列;再两两归并,......,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。 先来看代码: void MergeSort(Sqlist *L) { MSort(L-&gt...

yue_jijun的博客 507

Qt中多线程的使用(一)

我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file-&gt;open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...

yao5hed的专栏 1万+

英飞凌AURIX™ Development Studio(ADS)工程调试与烧录实战指南

本文详细介绍了英飞凌AURIX™ Development Studio(ADS)的工程调试与烧录实战指南。从调试环境搭建、硬件连接到断点设置、变量监控等核心调试技巧,帮助开发者快速掌握ADS安装使用教程,提升多核处理器开发效率。

k8l9m0n的博客 571

数据结构之排序的实现

1、插入排序   void InsertSort(RecType R[],int n){ int i,j,k; RecType temp; for (i=1; i&lt;n; i++) { temp=R[i]; j=i-1; while (j&gt;=0&amp;&amp;temp.key&lt;R[j]...

fushengfei的专栏 179

MaxEnt运行报错的各种问题及解决方法

由于我使用的环境数据并不是大部分人常用的worldclim上下载的气候数据,而是使用不同的四类环境数据,分别包括:降雨数据、气温数据、氮沉降数据和大气CO2浓度数据,数据需要分别从不同的网站下载,因此并不能得到非常一致的数据文件,导致MaxEnt运行时出现了各种各样的错误。文件终于能够读取了,然而计算到一半又弹出第三种问题,根据弹出的报错提示,找到错误所在那一行,用Notepad++打开,可以发现,这一行确实存在nan值,导致文件读取无法正常进行。出现上图所述的问题时,检查环境变量是否具有相同的行列号。

guye322的博客 1万+

排序函数(直接InsertSort,希尔ShellSort,选择SelectSort,快排QuickSort,堆排HeapSort,归并MergeSort)的实现(除基数排序)

排序函数(除基数排序)

disking的博客 737

179、瑞芯微RK3588在边缘盒子中的多摄同步架构——基于PLL的帧同步与曝光同步的实测调优

第一,RK3588的多摄同步,硬件上确实支持,但软件配置的坑比想象的多。第三,传感器的tPD差异是最大的不确定因素,选型时尽量选同一批次,而且要在量产前做全温测试——我遇到过低温下tPD变化超过3微秒的情况,直接导致同步失效。我遇到过一批IMX415,tPD差异达到±8微秒,直接超出SYNC控制器的补偿范围,最后只能挑芯片,把差异小的装到同一台设备里。别用100MHz,虽然分辨率更高,但高频信号在PCB走线上更容易引入EMI,边缘盒子的结构件往往没有很好的屏蔽,实测100MHz下同步信号边沿抖动明显增大。

zzfmlxs的博客 36

交换机背板带宽、交换容量与包转发率到底是啥?

在网络工程中,交换机是核心设备之一,而关于它的性能指标,背板带宽、交换容量、以及包转发率往往成为人们衡量其性能的重要参数。这些术语的定义、关系、以及在实际场景中的应用,都对交换机的选型与部署有着重要意义。本文将为您全面解读这些概念,帮助您深入了解交换机的核心性能指标。

网络技术联盟站 1548

Internal Sorting: Merge exchange sort: Sorting by Exchanging

Algorithm MAlgorithm M (Merge exchange). Records R1,...,RNR_1,..., R_N are rearranged in place; after sorting is complete their keys will be in order, K1<=...<=KNK_1<=...<=K_N. We assume that N>=2N

d3y1`5 81_09 731

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

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

Internal Sorting: List Merge Sort: Sorting by Merging

Algorithm LAlgorithm L (List merge sort). Records R1, … , RN are assumed to contain keys K1,…, KN, together with link fields L1, …, LN capable of holding the numbers -(N + 1) through (N + 1). There

d3y1`5 81_09 926

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Sorting (Merge Sort, Rainball Sort, quick select) 总结

Merge k Sorted Lists(这题是用PQ,或者merge sort都可以做,关于第K大的问题,参考: PriorityQueue 第K大问题总结) Sort an Array ( 重点掌握merge sort和quick sort,因为两者可以演变为很多其他的算法,divide conquer, quick select) Merge Intervals Sort Colors Sort List Convert Sorted Array to Binary Searc...

leetcode 解题思路 541

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Internal Sorting: Straight Two-way Merge Sort: Sorting by Merging

Algorithm SAlgorithm S (Straight two-way merge sort). Records R1,… ,RN are sorted using two memory areas as in Algorithm N. S1. [Initialize.] Set s <– 0, p <– 1. (For the significance of variables

d3y1`5 81_09 1384

Internal Sorting: Natural Two-way Merge Sort: Sorting by Merging

Algorithm NAlgorithm N (Natural two-way merge sort). Records R1,…,RN are sorted using two areas of memory, each of which is capable of holding N records. For convenience, we shall say that the reco

d3y1`5 81_09 1483

[Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)

Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merge sort and quick sort. I then implement them in C++. All the function takes in avector<int>&...

weixin_30772261的博客 103

Sorting Algorithms--Merge Sort

Merge sort is the second guaranteed O(nlog(n)) sort we'll look at. Like heap sort, merge sort requires additional memory proportional to the size of the input for scratch space, but, unlike heap sort, merge sort is stable, meaning that "equal" elements are

407

C++字符串互转实战:std::string与std::wstring编码转换指南

字符编码是计算机处理文本的基础,UTF-8与UTF-16/UTF-32的转换涉及码点、代理项等核心概念。不同平台wchar_t宽度差异导致跨平台乱码,需通过显式指定编码或手写编解码确保正确性。掌握字符串互转技术能有效解决乱码、截断问题,提升跨平台开发效率。常见应用场景包括配置文件读写、界面渲染、网络传输等。本文深入解析std::string与std::wstring的转换方案,涵盖Windows API、手写UTF-8编解码及std::wstring_convert,并提供性能对比与排查技巧。

weixin_34081595的博客 256

Sorting 排序算法: Merge Sort 归并排序

Sorting 排序算法: Merge Sort 归并排序 文章目錄Sorting 排序算法: Merge Sort 归并排序簡介參考正文算法思想原理输入算法思想算法流程算法复杂度分析Java 实现結語 簡介 归并排序是一个经典的分治算法,分治算法的核心思想便是将原问题分解(partition)成多个拥有相同结构的子问题,分别求解之后再合并(merge)所有子问题的解。接下来就来看看归并排序是如何运作的吧。 參考 动图来源 https://blog.youkuaiyun.com/qq_20011

超悠閒的博客 320

## 小木学习笔记---Advanced sorting algorithms(1)merge sort 归并排序

小明学习笔记–数据结构与算法(Java)-Advanced sorting algorithms(1)merge sort 归并排序 learning objectives divide-and-conquer strategy(归并思想) pseudocodes and time complexity(伪代码与时间复杂度) apply 归并排序过程解析what is the merge so...

programmer_ming的博客 331

Hack 开源等宽字体演进史:从 CHANGELOG 解读 1.0.0 到 3.003 的版本变迁

Hack 是一款为源代码而生的开源等宽字体,其完整演进轨迹被系统记录在仓库根目录的 [CHANGELOG.md](https://link.gitcode.com/i/6576fbeb8f91120d17fc6c34fb2a1ce3) 中。本篇技术文章以这份变更日志为主线,逐版本拆解 Hack 从 1.0.0 分叉 Bitstream Vera Sans Mono,到 3.003 完成字形全面重构

gitblog_00314的博客 475

排序算法(8)--Merge Sorting--归并排序--Merge sort--归并排序

1.基本思想   归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 2.实现原理 先递归的把数组划分为两个子数组,一直递归到数组中只有一个元素,然后再调用函数把两个子数组排好序,...

weixin_30911809的博客 198
上一篇: sorting - quick sort
下一篇: search - binary search
小马识图
博客等级 码龄18年 8粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值