当前位置: 首页 > news >正文

招商网站建设公司一站式装修的利弊

招商网站建设公司,一站式装修的利弊,邦邻网站建设熊掌号,首页定制文章目录 前言一、快速排序非递归二、归并排序五、归并排序非递归总结 前言 C语言数据结构快速排序的非递归、归并排序、归并排序的非递归等的介绍 一、快速排序非递归 快速排序非递归的定义 快速排序非递归,需要使用栈来实现。将左右下标分别push到栈中。在栈为…

文章目录

  • 前言
  • 一、快速排序非递归
  • 二、归并排序
  • 五、归并排序非递归
  • 总结

前言

C语言数据结构快速排序的非递归、归并排序、归并排序的非递归等的介绍


一、快速排序非递归

快速排序非递归的定义

  • 快速排序非递归,需要使用栈来实现。
  • 将左右下标分别push到栈中。
  • 在栈为空之前,循环获取区间的中间值下标并同时将左右区间排序。
  • 判断若中间值下标(keyi) + 1小于end,则将此区间push到栈中。
  • 若begin 小于 中间值下标(keyi),则将此区间push到栈中。
  • 循环直到栈为空。
int PartSort3(int* a, int left, int right)
{int keyi = left;int prev = left;int cur = left + 1;while (cur <= right){/*if (a[cur] < key){prev++;Swap(&a[cur], &a[prev]);}cur++;*/if (a[cur] < a[keyi] && ++prev != cur)Swap(&a[cur], &a[prev]);cur++;}Swap(&a[prev], &a[keyi]);return prev;
}// 快速排序非递归
void QuickSortNonR(int* a, int left, int right)
{int* tmp = (int*)malloc(sizeof(int) * (right - left + 1));ST st;STInit(&st);STPush(&st, right);STPush(&st, left);while (!STEmpty(&st)){int begin = STTop(&st);STPop(&st);int end = STTop(&st);STPop(&st);int keyi = PartSort3(a, begin, end);if (keyi + 1 < end){STPush(&st, end);STPush(&st, keyi - 1);}if (begin < keyi - 1){STPush(&st, keyi - 1);STPush(&st, begin);}}STDestroy(&st);
}
  • 其中PartSort3函数是快速排序快慢指针的单趟排序。

快速排序非递归测试

void TestQuickSortNonR()
{int a[] = { 9, 7, 6 ,4 ,8 ,3 ,5 ,1 ,2, 0 };PrintArray(a, sizeof(a) / sizeof(a[0]));QuickSortNonR(a, 0, sizeof(a) / sizeof(a[0]) - 1);PrintArray(a, sizeof(a) / sizeof(a[0]));
}

效果如下:
在这里插入图片描述

二、归并排序

归并排序定义

  • 直接将区间拆分成左右区间。
  • 左右区间分别递归直到单个数字,并在返回后归并左右区间到一个临时的数组中。
  • 然后将临时数组中的数字memcpy拷贝到原数组中。
// 归并排序
void _MergeSort(int* a, int left, int right, int* tmp)
{if (left >= right)return;int midi = left + (right - left) / 2;int begin1 = left, end1 = midi;int begin2 = midi + 1, end2 = right;_MergeSort(a, begin1, end1, tmp);_MergeSort(a, begin2, end2, tmp);int i = left;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[i++] = a[begin1++];}else{tmp[i++] = a[begin2++];}}while (begin1 <= end1){tmp[i++] = a[begin1++];}while (begin2 <= end2){tmp[i++] = a[begin2++];}memcpy(a + left, tmp + left, sizeof(int) * (right - left + 1));}void MergeSort(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("MergeSort malloc");return;}int left = 0;int right = n - 1;_MergeSort(a, left, right, tmp);free(tmp);
}

归并排序测试

void TestMergeSort()
{int a[] = { 9, 7, 6 , 6, 4,4 ,8 ,3 ,5 ,1 ,2, 0, 5 };PrintArray(a, sizeof(a) / sizeof(a[0]));MergeSort(a, sizeof(a) / sizeof(a[0]));PrintArray(a, sizeof(a) / sizeof(a[0]));
}

效果如下:
在这里插入图片描述

五、归并排序非递归

归并排序非递归定义

  • 归并一部分拷贝一部分
void MergeSortNonR(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);int gap = 1;while (gap < n){int i = 0;for (i = 0; i < n; i += 2 * gap){int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;if (end1 >= n || begin2 >= n){break;}if (end2 >= n){end2 = n - 1;}int j = i;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[j++] = a[begin1++];}else{tmp[j++] = a[begin2++];}}while (begin1 <= end1){tmp[j++] = a[begin1++];}while (begin2 <= end2){tmp[j++] = a[begin2++];}memcpy(a + i, tmp + i, sizeof(int) * (end2 - i + 1));}gap *= 2;}free(tmp);tmp = NULL;
}

归并排序非递归测试

void TestMergeSortNonR()
{int a[] = { 9, 7, 6 , 6, 4,4 ,8 ,3 ,5 ,1 ,2, 0, 5 };PrintArray(a, sizeof(a) / sizeof(a[0]));MergeSortNonR(a, sizeof(a) / sizeof(a[0]));PrintArray(a, sizeof(a) / sizeof(a[0]));
}

效果如下:
在这里插入图片描述


总结

C语言数据结构快速排序的非递归、归并排序、归并排序的非递归等的介绍

http://www.yayakq.cn/news/14955/

相关文章:

  • 网站建设必知网络服务公司简介
  • 电子商务网站建设与维护中职教材建设一个小游戏网站
  • 商丘做网站汉狮网络成都科技网站建设咨询
  • 网站建设合同前期需注意哪些问题网站w3c标准
  • 茶叶手机网站建设地方门户网站源码
  • 福州网站维护微网站获取访客手机
  • 做电商网站前端用什么框架沈阳搜索排名公司
  • 温州高端企业网站建设php网站开发实例教程 源代码
  • 网站 创意 方案成都网站设计开发做得好
  • 新网站做seo优化步骤杭州网站开发培训
  • 建网站空间网页设计3个页面
  • 免费微信微网站模板下载班级信息网站建设的现状
  • 合肥专业手机网站制作价格网站建设敬请期待图片素材
  • 购物网站二级页面模板深圳最新新闻事件
  • 买域名了怎么做网站个人网站效果图
  • 做网站要学哪些代码信融网站建设网站开发
  • 门户网站建设技术要求电商系统平台开发的主要技术
  • 外贸网站建设可以吗戈韦思网站建设
  • 网站建设需要具备广州商旅网站制作
  • 做一个商城网站多少钱wordpress主题windows
  • 完整网站建设案例教程深圳网站建设讯美
  • 优秀画册设计网站七宝做网站公司
  • 打不开wordpress站点苏州知名网站建设定制
  • 网站资讯板块的搭建广东城乡建设厅网站首页
  • 青海建设协会网站wordpress添加继续阅读
  • 陕西省建设注册中心网站山东省建设厅特种作业证查询网站
  • 做网站要了解的事情免费搭建商城网站
  • 怎样做科普视频网站网站开发项目周期的
  • 刘家窑做网站的公司网站开发搜索功能
  • 盱眙建设局网站做书照片网站