首页 > 其他分享 >如何用C语言对十亿数据排序大体就是用分块法把十亿个随机数据排序?

如何用C语言对十亿数据排序大体就是用分块法把十亿个随机数据排序?

时间:2023-03-20 19:03:40浏览次数:39  
标签:include end int mid C语言 start 排序 十亿

分析过程

将十亿个数据按照一定的规则分成若干个块,每个块包含M个数据 ,其中M是一个适当的大小,可以根据实际情况进行调整。

1、对每个块内的数据进行排序,可以使用快速排序、归并排序等常见的排序算法。

2、将排序好的块合并起来得到有序数据,可以使用归并排序等常见的合并算法。

具体实现时,可以采用外部排序的思路,将数据分成若干个块后, 逐一处理每个块,将处理好的块保存在外部存储器中, 最后再将这些块合并起来得到有序数据。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/*

编译环境:vs2022
*/
#define MAX_NUM 1000000000  // 十亿个数据
#define BLOCK_SIZE 1000000  // 每个块包含100万个数据
#define BLOCK_NUM (MAX_NUM / BLOCK_SIZE)  // 块的数量

// 归并排序
void merge_sort(int* arr, int start, int end) {
	if (start >= end) {
		return;
	}
	int mid = (start + end) / 2;
	merge_sort(arr, start, mid);
	merge_sort(arr, mid + 1, end);
	int* temp = (int*)malloc((end - start + 1) * sizeof(int));
	int i = start, j = mid + 1, k = 0;
	while (i <= mid && j <= end) {
		if (arr[i] <= arr[j]) {
			temp[k++] = arr[i++];
		}
		else {
			temp[k++] = arr[j++];
		}
	}
	while (i <= mid) {
		temp[k++] = arr[i++];
	}
	while (j <= end) {
		temp[k++] = arr[j++];
	}
	memcpy(arr + start, temp, (end - start + 1) * sizeof(int));
	free(temp);
}

标签:include,end,int,mid,C语言,start,排序,十亿
From: https://blog.51cto.com/rjgx/6138491

相关文章

  • c语言http文件下载断点续传示例(libcurl)
    以下是C语言实现HTTP文件下载的断点续传示例代码。假设要下载的文件URL为​​http://example.com/example.zip,本地保存为​​example.zip。#include<stdio.h>#incl......
  • mysql5.6以下排序
    SELECTtt.id,(@rowNum:=@rowNum+1)ASrankingFROM(select5asidunionallselect4asidunionallselect3asidunionallselect2asidunionall......
  • matlab sortrows函数 对行进行排序
    用法:B=sortrows(A)B=sortrows(A,column)第一种和第二种用法的区别在于,sortrows(A)将类似按照字典序排列,而指定了column时,各行只根据指定列为标准来排序,不考虑其他列的......
  • Java stream sorted自定义排序规则实现多字段排序
      Stream提供了丰富的操作(中间操作和终端操作)集合元素的轮子,但Stream流操作不影响原始集合数据,执行结果是一个新的集合对象。在《Javastreamsorted使用Comparator进......
  • 用C语言实现通讯录(初级版本)全部代码
    注意:分别用test.c(主函数),contact.c(函数实现),contact,h(函数声明)实现代码test.c#define_CRT_SECURE_NO_WARNINGS1#include"contact.h"voidmenu(){printf("**************......
  • 排序
    1.快速排序时间复杂度:平均复杂度为O(n·logn),最差情况下的复杂度为O(n2)空间复杂度:平均复杂度为O(logn),最差情况下的复杂度为O(n)1packageorg.example.sort;2......
  • 八大排序
    1.直接插入排序:和前面的比较,找到对应位置插入(注意相同的应该排后面一个2.希尔排序:对每一个子表进行直接插入排序设置步长d=x3.冒泡排序从后往前,两两对......
  • 堆排序——C语言描述
    堆排序——C语言描述目录堆排序——C语言描述0测试用例框架1定义2代码4测试用例0测试用例框架https://blog.csdn.net/m0_59469991/article/details/127137119?csdn......
  • C语言学习第二天
    1、#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){chararr1[]="abc";//"abc"--'a''b''c''\0',\0表示字符串的结束标志//数据在计算机上存储的时......
  • C语言函数大全--b开头的函数
    C语言函数大全本篇介绍C语言函数中b开头的函数1.bar1.1函数说明函数声明函数功能voidbar(intleft,inttop,intright,intbottom);画一个二维条形图......