首页 > 其他分享 >快速排序

快速排序

时间:2024-11-07 17:41:11浏览次数:1  
标签:int quickSort while num key 排序 快速

题目描述

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

输入格式

第一行为一个正整数 N。

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

输出格式

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

输入 #1

5
4 2 4 5 1

输出 #1

1 2 4 4 5

说明/提示

 

一、 左右指针法

#include<iostream>
using namespace std;

void swap(int &a,int &b){
    int t;t = a;a = b;b = t;
}

int sort(int i,int j,int num[]){
    int key = i;
    while(i < j){
        while(i < j && num[j] >= num[key]) j--;  //这里右指针先动
        while(i < j && num[i] <= num[key]) i++;  
        //右指针碰到比基准小的之后左指针动,直到左指针遇到比基准大的
        
        swap(num[i],num[j]);
        //j--;  交换完之后直接下一轮while,不需要让右指针再往左一次
    }
    swap(num[j],num[key]);
    return j;  //返回此次sort基准的位置,以便分割快排
}

void quickSort(int i,int j,int num[]){
    if(i >= j) return;
    int key = sort(i,j,num);
    quickSort(i,key-1,num);
    quickSort(key+1,j,num);
}

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

 

二、挖坑法(王道演示的就是这种)

 

标签:int,quickSort,while,num,key,排序,快速
From: https://www.cnblogs.com/uacs2024/p/18533116

相关文章

  • 插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序
    #include<stdio.h>#include<stdlib.h>//插入排序voidInsertSort(intA[],intn){inti,j,temp;for(i=1;i<n;i++){temp=A[i];j=i-1;while(j>=0&&A[j]>temp){A......
  • 链表的插入排序
    #include<stdio.h>#include<stdlib.h>//定义链表节点结构typedefstructNode{intdata;structNode*next;}Node;//创建新节点Node*createNode(intdata){Node*newNode=(Node*)malloc(sizeof(Node));newNode->data=data;newN......
  • 软件设计师:排序算法总结
    一、直接插入排序方式:从第一个数开始,拿两个数比较,把后面一位跟前面的数比较,把较小的数放在前面一位二、希尔排序方式:按“增量序列(步长)”分组比较,组内元素比较交换 假设初始关键字:48   37   64   96   75   12   26   58   54   3,有......
  • 8.2 NLP主流任务和快速实践——NLP主流任务和快速实践
    8.2NLP主流任务和快速实践——NLP主流任务和快速实践自然语言处理(naturallanguageprocessing,简称NLP)是计算机科学和人工智能领域重要的方向,自2018年BERT预训练模型被提出以来,自然语言处理领域的各项任务指标不断被刷新,甚至在一些任务上已经超过了人类的基准值,例如阅读理解......
  • 常考的排序算法
    冒泡排序#include<iostream>#include<string>usingnamespacestd;//voidShellsort(intA[],intn)//{//   intd,i,j;//   for(d=n/2;d>=1;d=d/2)//   {//      for(i=d+1;i<=n;i++)//      {//     ......
  • 21天全面掌握:小白如何高效学习AI绘画SD和MJ,StableDiffusion零基础入门到精通教程!快速
    今天给大家分享一些我长期以来总结的AI绘画教程和各种AI绘画工具、模型插件,还包含有视频教程AI工具,免费送......
  • 快速删除iPhone照片:释放你的空间,加速你的手机
    随着时间的推移,我们的iPhone往往会积累下大量的照片,这不仅占用了大量的存储空间,还可能影响手机的性能。如果你正寻找一种快速、高效的方法快速删除iPhone照片,以下的策略将会大有帮助。此外,本文还将介绍如何利用CleanMyPhone这一工具,以实现更加快速和系统的照片清理。理解存储......
  • DBeaver如何快速格式化sql语句,真简单!
    前言我之前在使用DBeaver的时候,一直不知道其可以格式化sql语句,导致sql语句看起来比较杂乱,今天就来介绍下DBeaver如何格式化sql语句。如何格式化sql语句首先,我们打开一个sql窗口,在里面输入我们要查询的sql语句,如图所示。可以看到,此时sql语句是比较杂乱的。然后,我们鼠标右击,选......
  • 快速沃尔什变换(FWT)
    快速沃尔什变换(FWT)前言本文为个人学习笔记,大量参考了oi-wiki以及其他博客的内容。问题给定\(a,b\)序列,求:\[c_i=\sum_{i=j\oplusk}a_jb_k\]其中,\(\oplus=\operatorname{or}/\operatorname{and}/\operatorname{xor}\)。做法核心思想对于某种特定的\(\o......
  • 第十三届蓝桥杯Python 大学 B 组 数位排序
    数位排序问题描述小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022排在409前面,因为2022的数位之和是6,小于409的数位之和13。又如,......