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

算法1-2 排序(快排)

题目描述

将读入的 N 个数从小到大排序后输出。

输入格式

第一行为一个正整数 N。

第二行包含 N 个空格隔开的正整数 ai​,为你需要进行排序的数。

输出格式

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

输入输出样例

输入 #1

5
4 2 4 5 1

输出 #1

1 2 4 4 5

说明/提示

对于 20% 的数据,有 1≤N≤10^{3}

对于 100% 的数据,有 1≤N≤10^{5},1≤ai​≤10^{9}

快速排序(Quick Sort)

适用场景

  1. 大数据集:快速排序在处理大数据集时通常比简单的排序算法更快,因为它采用了分治策略,平均时间复杂度为 O(n log n)。

  2. 内存充足:快速排序是原地排序算法(in-place sort),但它需要额外的栈空间用于递归调用。在内存充足的情况下,这不是问题。

  3. 数据随机分布:当数据随机分布时,快速排序的性能最好。如果数据已经部分排序或完全排序,快速排序的性能可能会下降(最坏情况时间复杂度为 O(n^2)),但这种情况可以通过随机选择枢轴(pivot)或三数取中来缓解。

 

 

#include<iostream>
using namespace std;

int n;
const int N = 100010;
int a[N];

void quick_sort(int a[], int l, int r)  //l:第一个数的下标,r:最后一个数的下标 
{
	if(l>=r) return;
	
	int i = l-1, j = r+1;  //i,j两个指针分别先指向越界的位置
	int x = a[l+r >> 1];
	
	while(i<j)
	{
		do i++; while(a[i]<x);  //i先++,如果不-1,下标会从1开始 
		do j--; while(a[j]>x);
		if(i<j) swap(a[i], a[j]);
	}
	
	quick_sort(a, l, j);
	quick_sort(a, j+1, r);
}

int main()
{
	cin>>n;
	
	for(int i=0; i<n; i++)
	{
		cin>>a[i];
	}
	
	quick_sort(a, 0, n-1);
	
	for(int i=0; i<n; i++)
	{
		cout<<a[i]<<" ";
	}
	
	return 0;
}

相关文章:

  • 智能合约与区块链中的NLP应用:自动化法律文书分析与合同审查【附核心实战代码】
  • 通过C语言实现“数据结构”课程中的链表,数据,数,图
  • Linux-Ansible模块扩展
  • 基于Java的实时数据流处理框架设计与实现
  • 从训练到部署:基于YOLOv5和TensorRT的人脸口罩检测系统全流程实战指南(开源代码)
  • 修改`FSL Yocto Project Community BSP`用到的u-boot源码,使其能适配百问网(100ask)的开发板
  • 架构师面试(六):熔断和降级
  • 智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码
  • 软开的过程
  • nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典
  • Spring Boot 多模块怎么统一管理
  • python网络安全怎么学 python做网络安全
  • Git学习笔记
  • Java 注解
  • 点云的几何特征
  • git常用指令详解
  • 【多语言生态篇六】【DeepSeek×Node.js:WebSocket实时服务从入门到“超神“指南(史诗级万字拆解)】
  • [ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug
  • MySQL分库分表后单表数据还是过大怎么办
  • javascript闭包在实际项目中有哪些应用场景?请举例说明。
  • 聊城做网站哪里好/百度开发平台
  • 是网站建设专业好/关注公众号一单一结兼职
  • 技术支持 沧州网站建设/seo自动工具
  • 网站搜索条怎么做/网络seo外包
  • 天元建设集团有限公司经济官司/seo排名赚app是真的吗
  • 有微重庆网站吗/搜索引擎的网站