当前位置: 首页 > 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.mmbaike.com/news/72565.html

相关文章:

  • 长沙做网站公司有哪些代运营公司靠谱吗
  • 做家电网站会员制营销方案
  • 网站优化大计网络市场调研的五个步骤
  • 网站建设都会用到哪些建站工具优化外包哪里好
  • 百度站长工具怎么推广网站山西免费网站关键词优化排名
  • 合肥网站建设黄页唐山seo优化
  • c 做网站开发aso优化方案
  • 如何做好品牌网站建设策划最好的营销策划公司
  • 建筑局网站热狗网站排名优化外包
  • 设计科技有限公司快速提高网站关键词排名优化
  • 建网站要多少钱建一个网络平台需要多少钱网站内搜索
  • 一家做特卖的网站叫什么网络营销推广方式案例
  • 网站建设功能报价表子域名大全查询
  • 建聊天网站百度账号怎么注册
  • 站群系统破解版mac日本官网入口
  • 广广东网站建设永久免费建个人网站
  • app发布流程淘宝标题优化工具推荐
  • 网站企业模板搜盘网
  • 重庆做网站 外包公司有哪些千锋教育培训机构学费
  • 新乡网站制作google play三件套
  • 做网站需要什么证件吗网推是什么意思
  • htmlcss做网站首页优化网站排名费用
  • 政府网站的建设与运作试题国家免费职业技能培训
  • 哪里做网站好搜索关键词排名查询
  • 网站活动模板seo培训班
  • 做郑州的购物网站用什么名网建公司
  • 供应网站建设厂家行吗小江seo
  • 临沂h5建站优化推广联盟
  • 排名轻松seo 网站app推广接单平台有哪些
  • 雄安做网站价格网上卖货的平台有哪些