大部分排序用冒泡可以解决,但是在冒泡排序中双层for循环所有的循环次数不能超过10的8次方,以此运用快排法可较快的解决问题;

以100000个数为例

for(i=1;i<=100000-2;i++)

for(j=1;j<=100000-2-i;j++)

.......;

共需要循环100000*100000次 所以肯定超时;

找女朋友

Time Limit: 15MS Memory limit: 65536K

题目描述

山东理工大学有很多学生,当然也有很多美女,机械实验班的学委(外号:大王八)很想找个女朋友,但他想找个身高和自己相配的女生坐女朋友,现有理工大N个美女的身高数据,但由于N的值较大,为了尽快找到合适的女友,大王八想请你帮他完成这N个美女的身高排序,按降序排列。

输入

输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)

输出

输出只有一行,为这N个数的降序序列,数与数之间用空格隔开。

示例输入

5
1 3 2 5 4

示例输出

5 4 3 2 1
 
 
快排法
#include<stdio.h>
#include<stdlib.h>
#define MAX 10000001
int a[MAX];void px(int l,int r);
int qp(int l,int r);
int main()
{
int i,n; scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
px(1,n);
for(i=n;i>=1;i--)
{
printf("%d",a[i]);
if(i!=1)printf(" ");
else printf("\n");
}
return 0;
}
void px(int l,int r)
{
if(l>=r)return 0;
int mid=qp(l,r);
px(l,mid-1);
px(mid+1,r);
}
int qp(int l,int r)
{
int bj=a[l];
while(l<r)
{
while(bj<=a[r]&&l<r)
{
r--;
}
a[l]=a[r];
while(bj>=a[l]&&l<r)
{
l++;
}
a[r]=a[l]; }
a[r]=bj;
return r;
}

归并法
#include<stdio.h>
int a[1100001];
int c[1100001];
void hebing(int l,int r,int ll,int rr)
{
int i=l;
int j=ll;
int k=l;
for(i,j,k;i<=r&&j<=rr;)
{
if(a[i]<a[j])
{
c[k]=a[i];
i++;
k++;
}
else
{
c[k]=a[j];
j++;
k++;
}
}
if(i<=r)
for(i;i<=r;i++)c[k++]=a[i];
if(j<=rr)
for(j;j<=rr;j++)c[k++]=a[j];
for(i=l;i<=rr;i++)
a[i]=c[i];
}
void paixu(int l,int r)
{
if(l>=r)return ;
int mid=(l+r)/2;
paixu(l,mid);
paixu(mid+1,r);
hebing(l,mid,mid+1,r);
}
int main()
{
int i;
int n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
paixu(1,n);
for(i=n;i>=1;i--)
{
printf("%d",a[i]);
if(i!=1)printf(" ");
else printf("\n");
}
return 0;
}

快排法(模版型)与归并法相关推荐

  1. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  2. c++ 快排优化(三数取中法)

    快排优化(三数取中法) 文章目录 快排优化(三数取中法) 前言 一.三数取中法 二.递归思想 三.程序实现过程(代码) 1.取基准数(三数取中) 2.快速排序(递归) 总结 前言 作为刚刚入门c和c+ ...

  3. 【Java】七大排序(冒泡、选择、插入、快排、归并、堆排、希尔排序)

    一.相关归纳总结 1.时间复杂度 O(n^2):冒泡排序,选择排序,插入排序 O(log2n):快速排序,希尔排序,堆排序,归并排序 2.空间复杂度 O(1):插入排序.冒泡排序,选择排序,堆排序,希 ...

  4. 排序(一)归并、快排、优先队列等(图文具体解释)

    排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次.在剩下的元素中找到最小的元素.将它与数组的第二个元素交换位置. 如此往复,直到将 ...

  5. 【数据结构与算法】快排、归并 O(nlogn) 基于比较

    冒泡.插入.选择 O(n^2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.分治思想 1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的 ...

  6. 排序(冒泡、选择、插入、希尔、快排、堆排、归并)

    冒泡排序   冒泡排序时通过无序区中相邻记录的关键字间的比较和位置的交换,使关键字最小的元素如气泡似的逐步上浮直水面.有序区逐渐扩大,无序区逐渐缩小.   冒泡排序算法的原理如下: 比较相邻的元素.如 ...

  7. 【排序算法】插入、选择、堆排、快排、归并、计数

    一.插入排序 insertSort 1.实现 2.性能分析 3.折半插入排序(了解) 二.希尔排序 ShellSort 1.原理 2.实现 3.性能分析 三.选择排序 selectSort 1.原理 ...

  8. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  9. 排序(下)---快排、归并

    排序(下)-快排.归并 快速排序 采用分治的思想:每次选区一个数作为基准,让整个数据中凡是大于此数的放在此数的右边,小于此数的放在此数的左边,然后进行对此数的两边进行选基准,如上方式的分法,递归下去, ...

最新文章

  1. Spring Cloud第七篇:高可用的配置中心
  2. 2021 年了,机器/深度学习还有哪些坑比较好挖?
  3. 7系列FPGA逻辑单元理解
  4. 转录组分析_高级转录组分析和R数据可视化
  5. 现代C++函数式编程
  6. web_find和web_reg_find的用法和区别
  7. eclipse实现批量修改文件的编码方式
  8. 关于delete字符串 需不需要加 [ ]
  9. 「leetcode」90.子集II【回溯算法】详细图解!
  10. (大家发表一下看法)微软研发智能系统 可通过电脑24小时监控员工
  11. MFC:Ribbon界面设计
  12. 记录:2018年CCF优秀博士学位论文奖信息
  13. ffmpeg 音频解码二
  14. 盛邦安全网站监控预警平台化繁为简 ——网站安全从管理向治理的迁移
  15. 百度搜索引擎 - 搜索关键字排名 API
  16. 初识AOS --------AOS学习笔记系列
  17. 507. Perfect Number
  18. 红米note4x开启root权限
  19. 大学获奖范文,围绕主题我的大学梦进行阐述
  20. 机器学习之随机森林(手推公式版)

热门文章

  1. 高等数学(第七版)同济大学 习题9-7 个人解答
  2. MES支撑企业进行精细化管理
  3. APP Inventor,一个能快速做出app的工具。只要会C语言就行,很好的调试单片机工具。基于arduino的蓝牙数据传送在APP显示,室内花园的制作。
  4. 12C 数据库之坑爹又坑队友的无故链接不上问题处理
  5. 最小生成树、矩阵树定理、Prufer序列总结
  6. SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;
  7. 手用计算机怎么弄声音,一个吉他手如何在电脑上录音编曲
  8. 飞凌嵌入式技术帖——i.MX9352的GPIO怎么用?
  9. linux下系统调用接口,LINUX系统调用
  10. 1+x的n次方根为什么等于x除以n再加1