大部分排序用冒泡可以解决,但是在冒泡排序中双层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. 通过mtd读写flash_关于如何在kernel起来之后通过直接dd读写nand flash分区来更新zImage的mtd问题...
  2. springboot页面乱码问题
  3. MySQL 修改用户
  4. C语言 找出任意两整数之间的素数以及他们的和
  5. numpy.repeat作用,语法,参数解读以及实例
  6. 无法获取计算机名,Spring Cloud常见问题之:无法注册主机名
  7. 代理模式vs适配器模式vs外观模式
  8. PHP连接MongoDB
  9. RVA和文件偏移的转换
  10. excel在线_如何设计有趣又实用的在线课程
  11. dnf时装补丁教程_DNF时装补丁修改教程
  12. 饥荒联机版服务器控制台本地和在线,《饥荒》多人联机版控制台开启方法详解...
  13. 山东科技大学计算机控制系统期末考试试卷,山东科技大学 计算机操作系统试题b...
  14. 加州房价预测项目详细笔记(Regression)——(1)研究数据获得灵感
  15. 罗尔定理、拉格朗日中值定理和柯西中值定理和用他们证明不等式、
  16. (蓝桥杯)数字三角形。。(最简单的dp题)
  17. 中国十大垃圾软件网站
  18. python requests ssl 证书问题
  19. HTML-6.表单学习—如何做一个注册(登录)网页
  20. 【C++复习总结回顾】—— 【一】基础知识+字符串/string类

热门文章

  1. c语言程序中超联赛,同济大学2018年数学建模竞赛C题中超联赛-同济大学数学系.PDF...
  2. linux搭建nexus私服仓库并简单使用
  3. 总是忘记去哪找自己在CSDN上提问的问题
  4. 计算机科学与技术就业前景(一)
  5. 搭建.net开发环境以及配置工程(win10环境)
  6. Explaining Away的简单理解
  7. 智慧人脸门禁系统与隐私保护并驾齐驱!
  8. 无法启动此程序,因为计算机中丢失vcruntime140.dll”错误的解决办法
  9. 法国数学家梅齐亚克的砝码问题
  10. Linux Shell 字符串拼接