探索数据库的实现原理
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本篇内容介绍了"探索数据库的实现原理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并连接的思想与归
千家信息网最后更新 2025年11月09日探索数据库的实现原理
本篇内容介绍了"探索数据库的实现原理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
归并连接的思想与归并排序的思想类似,详见代码注释.
#include#include #include #include "merge_sort.h"/*array : 待处理的数组low : 低位middle : 中间位high : 高位*/void merge_array(int array[],int low,int middle,int high){ //左边数组的大小(middle在左边数组中,加1) int n1 = middle - low + 1; //右边数组的大小 int n2 = high - middle; //printf("---- merge_array : low = %d,high = %d,middle = %d.\n",low,high,middle); //初始化左右两边数组 int left[n1],right[n2]; for(int i = 0;i < n1;i++) left[i] = array[low+i]; for(int i = 0;i < n2;i++) right[i] = array[middle+i+1]; //归并 int i=0,j=0,k=low; //同时遍历左右两边数组,较小值进入到结果数组中(回填) for(;i < n1 && j < n2;) if(left[i] < right[j]) array[k++] = left[i++]; else array[k++] = right[j++]; //处理数组中剩余的其他元素 while(i < n1) array[k++] = left[i++]; while(j < n2) array[k++] = right[j++]; // printf("--- merge_array : ---\n"); // print_array(array+low,n1 + n2);}/*array : 待处理的数组low : 低位high : 高位*/void merge_arraybyrange(int array[],int low,int high){ if (low >= high) return;//低位置大于等于高位值,退出 //取中间位置 int middle = (low + high)/2; //printf("---- merge_sort : low = %d,high = %d,middle = %d.\n",low,high,middle); //对左边数组进行排序 merge_arraybyrange(array,low,middle); //对右边数组进行排序 merge_arraybyrange(array,middle+1,high); //两边数组排序完毕后,归并两边的数组 merge_array(array,low,middle,high); // printf("--- merge_sort : ----\n"); // print_array(array+low,high - low + 1);}/*递归调用方法array : 待处理的数组low : 低位high : 高位*/void merge_sort_recursion(array *tmparr){ int low = 0; int high = tmparr->counter - 1; merge_arraybyrange(tmparr->arr,low,high);}/*非递归调用方法a/b:已完成排序的数组c:结果数组*/void merge_twoarrays2one(array *a,array *b,array *c){ int i=0,j=0; c->counter=-1; for(;i < a->counter && j < b->counter;) { //归并排序,任意一个数组结束则循环结束 if(a->arr[i] < b->arr[j]) { c->arr[++c->counter] = a->arr[i++]; } else { c->arr[++c->counter] = b->arr[j++]; } } //处理余下的数据 while(i < a->counter) { c->arr[++c->counter] = a->arr[i++]; } while(j < b->counter) { c->arr[++c->counter] = b->arr[j++]; } //从0开始计数,counter+1 c->counter++;}/*tmparr : 待排序的array结构体*/void merge_sort(array *tmparr){ //临时数组 int tmp[tmparr->counter]; //临时数组(缓存) array buffer; buffer.arr = tmp; for(int i=1;i < tmparr->counter;i=i*2) { //i=每次比较的数量=2^x = 1/2/4/8... for(int j=0;j < tmparr->counter;j+=i*2) { //j=比较起始位置,每次比较i个数 if(j+i >= tmparr->counter) break; array arr1,arr2; //指向比较的位置(数组1) arr1.arr = tmparr->arr+j; arr1.counter = i; //指向比较的位置(数组2) arr2.arr = tmparr->arr+j+i; arr2.counter = i; //数组2的数量,判断以免越界 if(j+i*2 >= tmparr->counter) arr2.counter = tmparr->counter - (j + i); //归并数组1&2 merge_twoarrays2one(&arr1,&arr2,&buffer); // printf("---------- i = %d,j = %d,counter = %d\n",i,j,buffer.counter); // print_array(buffer.arr,buffer.counter); //归并好的数据拷贝到tmparr中 memcpy(tmparr->arr+j,buffer.arr,buffer.counter*sizeof(int)); } // printf("------------ i = %d\n",i); // print_array(tmparr->arr,tmparr->counter); }}
运行输出
ethanhe@DESKTOP-V73MH70 /d/yunpan/work/Z-SRC/sort$ /d/tmp/test.exe--------- test_merge -----------item[0] is 1item[1] is 5item[2] is 10item[3] is 21item[4] is 30item[5] is 40item[6] is 99item[7] is 100item[8] is 200item[9] is 301item[10] is 400--------- test_merge by recursion-----------item[0] is 1item[1] is 5item[2] is 10item[3] is 21item[4] is 30item[5] is 40item[6] is 99item[7] is 100item[8] is 200item[9] is 301item[10] is 400
"探索数据库的实现原理"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数组
排序
数据
位置
处理
低位
高位
j++
原理
数据库
内容
右边
大小
思想
指向
数量
方法
更多
知识
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
贵州婷维软件开发有限公司
云服务器和服务器价格对比
鑫英泰网络安全监测
软件开发去哪找
创建的物理数据库怎么测试
建立网络安全机制调研
数据库怎么在两个表中查询
欻网络安全高峰论坛
网络技术(三级)书籍
数据库qty用什么类型
虚拟服务器的技术原理
长岛管理系统软件开发公司
网络安全法日志未留存
网络安全是谁管理的
服务器钢材价格行情最新
数据库高可用的优势
基因注释数据库
海南鲲鹏服务器供应公司
防范网络安全危机
定制软件开发聚顶科技好在线
廊坊科龙网络技术有限公司
网络安全句子及参考文献
网络安全手抄报电子版模版
数据库连接游标
数据库添加多个主键
vac安全服务器怎样验证
景服务器
数据库高可用的优势
为什么服务器没有响应进不去游戏
服务器的mtbf