P1177 【模板】快速排序(二分排序)

简介: P1177 【模板】快速排序(二分排序)

题目描述



利用快速排序算法将读入的  N 个数从小到大排序后输出。


快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)


输入格式



第 1  行为一个正整数 NN,第 2  行包含  N 个空格隔开的正整数  ai,为你需要进行排序的数,数据保证了  Ai 不超过 10^9 。


输出格式



将给定的 N  个数从小到大输出,数之间空格隔开,行末换行且无空格。


输入输出样例



输入 #1复制

1. 5
2. 4 2 4 5 1


输出 #1复制

1 2 4 4 5


说明/提示



对于  20% 的数据,有 N≤103;

对于  100% 的数据,有 N≤10^5。


#include<iostream>
using namespace std;
int a[100000];
void yyds(int n,int q)//2分法 就是不断的把比中间的数小的放在左边,大的放在右边,重复这个过程。 
{
int i=n,j=q;
int mid=a[(n+q)/2];
while(i<=j)//如果刚刚好到达中间的数就退出循环 
{
  while(a[i]<mid) i++;//找到左边比中间大的数 
  while(a[j]>mid) j--;//找到右边比中间小的数 
  if(i<=j)//可能会出现都到达中间位置 
  {
    swap(a[i],a[j]);
    i++;
    j--;
  }
}
if(n<j)yyds(n,j);//因为j在左边i在右边 
if(i<q)yyds(i,q);
}
int main()
{
  int i,m;
  cin>>m;
  for(i=1;i<=m;i++)
  {
    cin>>a[i];
  }
  yyds(1,m);
  for(i=1;i<=m;i++)
  {
    cout<<a[i]<<' ';
  }
}
相关文章
|
6月前
|
算法 搜索推荐 C++
【洛谷 P1177】【模板】快速排序 题解(快速排序+数组索引)
**快速排序模板题目**,要求使用快排算法对输入的整数序列进行排序。输入包含正整数N和N个整数,输出排序后的序列。20%的数据N≤10^3,所有数据N≤10^5。代码中提供了一种实现,包括读取输入、定义partition函数划分数组、递归调用quickSort及主函数执行排序和输出。注意C++选手避免使用STL的`sort`。
34 0
|
存储 算法 搜索推荐
【排序】排序这样写才对Ⅰ --插入排序与选择排序
常见的排序算法有这些.将会分成几个章节讲完,感兴趣的uu们可以关注下我的排序专栏,方便和后期观看.
62 0
|
算法 搜索推荐
基本算法(排序和二分查找)
基本算法(排序和二分查找)
50 0
|
算法 搜索推荐
排序——冒泡排序
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
|
算法 搜索推荐 API
算法排序3——选择排序
算法排序3——选择排序
114 0
算法排序3——选择排序
|
搜索推荐 C语言
用c语言代码将数列8、6、1、9、2从大到小排序。(要求:画出冒泡排序算法的排序过程)
用c语言代码将数列8、6、1、9、2从大到小排序。(要求:画出冒泡排序算法的排序过程)
119 0
|
搜索推荐 算法 Java
排序:冒泡排序(算法)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
288 0
排序:冒泡排序(算法)
|
算法 搜索推荐 Java
排序:选择排序(算法)
排序就是算法。   选择排序(Selection sort)是一种简单直观的排序算法。 选择排序是不稳定的排序方法。   eg:序列[9,9, 1]第一次就将第一个[9]与[1]交换,导致第一个9挪动到第二个9后面 Note:一般面试的时候才会用到选择、冒泡排序。
277 0
排序:选择排序(算法)
|
算法
排序——快速排序
排序——快速排序
124 0
排序——快速排序
【LeetCode912】排序数组(快速排序)
看似一道很常规的排序题目,但是如果使用以前的快速排序模板(如下),会发现超时了!如下的Quicksort函数(递归)和划分枢轴的函数Partition。
195 0
【LeetCode912】排序数组(快速排序)