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

韩国美食做视频网站做网站技巧

韩国美食做视频网站,做网站技巧,网络空间,旅游公司的网站怎么做快速排序与归并排序简介: quick_sort为快速排序,merge_sort为归并排序,两者基于分治的思想; 快速排序,简称快排,它以原来数组中的一个值(我们记为x)作为界限,将比它小…

快速排序与归并排序简介: 

quick_sort为快速排序,merge_sort为归并排序,两者基于分治的思想;

快速排序,简称快排,它以原来数组中的一个值(我们记为x)作为界限,将比它小的元素放到x的左边,大于x的放到x的右边,一遍之后,x就放到了它应该放到的位置,然后对x左侧的子数组做快排,同理,对于x右侧的子数组继续做快排即可;

归并排序,是将数组的中点作为界限,将处于前50%的值放在左一半,将大小处于后50%的值放在右一半。不考虑顺序。一轮过去,我们继续对数组前半边使用归并排序,同理,对于数组右半边使用归并排序。值得注意的是,归并排序一直这样递归下去,数组将不断被分割为大小为1的单个元素数组。前面我们并没有考虑顺序,现在我们使用一个tmp数组,对于两个已经被切割的子数组中的元素进行排序。对于原来两个数组各自使用一个指针从头到尾遍历,谁小谁就放在tmp数组中,遍历完成之后,如果有一个数组没有遍历完,那说明它的值相对于另一个数组来说值较大,我们直接拷贝到tmp数组中即可。这样tmp数组放的肯定就是已经排好序的元素,我们应该把他放到原数组中去,让它参与下一轮比较。

代码一览:

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<assert.h>
using namespace std;void Swap(int* pa, int* pb) {int temp = *pa;*pa = *pb;*pb = temp;
}
void quick_sort(int q[], int l,int r) {if(l >= r)return;int i = l - 1, j = r + 1;int x = q[(l + r) / 2];while (i < j) {do i++; while (q[i] < x);do j--; while (q[j] > x);if (i < j)Swap(&q[i], &q[j]);}quick_sort(q, l, j), quick_sort(q, j+1,r);//不要把这个忘记了!是j而不是i,如果是后者,模板得换;
}
int tmp[100];
void merge_sort(int q[], int l, int r) {if (l >= r)return;int mid = (l + r) / 2;merge_sort(q, l, mid), merge_sort(q, mid + 1, r);int i = l, j = mid + 1;int k = 0;while (i <= mid && j <= r) {if (q[i] < q[j])tmp[k++] = q[i++];else tmp[k++] = q[j++];}while (i <= mid) {tmp[k++] = q[i++];}while (j <= r) {tmp[k++] = q[j++];}for (k = 0, i = l; i <= r; k++,i++) {q[i] = tmp[k];}
}
int main() {int arr[] = { 95,1,45,45,454,5,45,62,64,87,84,36,16,1 };int arr2[] = { 95,1,45,45,454,5,45,62,64,87,84,36,16,1 };int len = sizeof(arr) / sizeof(arr[0]);quick_sort(arr, 0, len - 1);merge_sort(arr2, 0, len - 1);for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}puts("");for (int i = 0; i < len; i++) {printf("%d ", arr2[i]);}puts("");return 0;
}

为了保证随机性,我们亦可以在main函数中使用随机数来初始化数组,其他不变:

int main(){int p[10],q[10];srand(time(NULL));for (int i = 0; i < 10; i++) {p[i] = rand() % 999 + 1;q[i] = rand() % 9999 + 1;}for (int i = 0; i < 10; i++) {printf("%d ", p[i]);}puts("");for (int i = 0; i < 10; i++) {printf("%d ", q[i]);}puts("");quick_sort(p, 0, 9);merge_sort(q, 0, 9);puts("");for (int i = 0; i < 10; i++) {printf("%d ", p[i]);}puts("");for (int i = 0; i < 10; i++) {printf("%d ", q[i]);}puts("");return 0;
}

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

相关文章:

  • 网站建设 迅雷下载东莞微网站建设费用
  • 盗版网站怎么做的wordpress 如何修改网页标题字体
  • 网站设计好了如何上传到自己搭建的网上去新浪虚拟主机做网站
  • 什么是三合一网站建设社区类网站有哪些
  • 搭建网站要不要给域名对方免费 wordpress
  • 网站预算湖南高端网站制作公司
  • 国外js网站长宁专业网站制作公司
  • 建网站的费用是多少钱工商名称预先核准官网
  • 查建设公司资质的网站代发百度首页排名
  • 个人网站建设实训目的平湖网站改版
  • 二手房在哪个网站做合同黄石网站建设哪家专业
  • 试玩网站怎么做黄骅港到石家庄的客车时刻表
  • 揭阳seo网站管理2008建立的php网站慢
  • 公司怎么建设网站厦门物业备案建设局登什么网站
  • 必应网站提交入口自己在家开网站做推广
  • 动力无限做网站怎样网站备案能查到什么东西
  • 网站建设环境搭建心得体会常德百度seo
  • 郑州便宜网站建设公司杭州集团公司网站建设
  • 广安发展建设集团官方网站表白网页制作软件手机版
  • 免费企业建网站gif8.net基于wordpress
  • 东莞市建设质量监督网站网络营销成功案例有哪些2022
  • 郴州市网站建设科技建设品牌公司网站
  • 网站建设理由和目的做国际网站需要多少钱
  • 建筑工地招聘网站注册网站填写不了地区
  • 做一个网站多长时间seo竞争对手分析
  • 做凉菜的网站营销效果评估与分析
  • 网站策划的重要性wordpress oauth2
  • 做北美市场用哪个网站有没有做网站的团队
  • 免费设计app的网站建设深圳网站建设价钱
  • 温岭市住房和城乡建设局网站酒店网站报价方案