首页 > 编程语言 >快速排序c++&&java代码实现

快速排序c++&&java代码实现

时间:2024-07-06 13:26:43浏览次数:9  
标签:分界点 java 递归 int quickSort c++ while && 排序

快速排序的思想 (基于分治法): 

每次选一个基准元素x,通过一次遍历将排序表划分为独立的两部分a[l,k-1],a[k+1,r];

其中左边的元素<=x,右边的1元素>x,然后递归下去,直到每个块的大小为1 ;

c++

#include<bits/stdc++.h>
using namespace std ;

void quickSort(vector<int>& q,int l,int r){
    if (l >= r) return;
    //设置分界点
    int x = q[l + r >> 1];
    //调整区间
    int i = l - 1, j = r + 1;
    while (i < j) {
        //-查找分界点左侧大于等于分界点的值
        do ++i; while (q[i] < x);
        //-查找分界点右侧小于等于分界点的值
        do --j; while (q[j] > x);
        //-交换位置
        if (i < j) {
            int temp = q[i];
            q[i] = q[j];
            q[j] = temp;
        }
    }
    //对左侧递归排序
    quickSort(q, l, j);
    //对右侧递归排序
    quickSort(q, j + 1, r);
}

int main(){
	int n ; cin >> n ;
	vector<int> a(n) ;
	for(int& x : a) cin >> x ;
	quickSort(a,0,n-1) ;
	for(int& x : a) cout << x << " " ;
}

java

package sf;

import java.util.Scanner;

public class quicksort {

    public static void quickSort(int[] q, int l, int r) {
        if (l >= r) return;
        //设置分界点
        int x = q[l + r >> 1];
        //调整区间
        int i = l - 1, j = r + 1;
        while (i < j) {
            //-查找分界点左侧大于等于分界点的值
            do ++i; while (q[i] < x);
            //-查找分界点右侧小于等于分界点的值
            do --j; while (q[j] > x);
            //-交换位置
            if (i < j) {
                int temp = q[i];
                q[i] = q[j];
                q[j] = temp;
            }
        }
        //对左侧递归排序
        quickSort(q, l, j);
        //对右侧递归排序
        quickSort(q, j + 1, r);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] q = new int[n];
        for (int i = 0; i < n; i++) {
            q[i] = sc.nextInt();
        }
        quickSort(q, 0, n -1);
        for (int value : q) {
            System.out.print(value + " ");
        }
    }
}

标签:分界点,java,递归,int,quickSort,c++,while,&&,排序
From: https://blog.csdn.net/ros275229/article/details/140199470

相关文章

  • java学习——基础语法篇(适合已经学过c++的人群)
    本篇适合之前学过c和c++语言,现在要学java的人进行学习。由于之前学习过c++同为面向对象的程序语言,基础语法在相对比之下学习,对比c++与java的差异,会快速掌握基本语法。学编程语言,语法不是重点,用时即查,编程思路才是重点。1.注释、标识符、关键字、数据类型,变量定义,运算符与c++基本......
  • Java面试题系列 - 第4天
    题目:深入理解Java泛型与类型擦除背景说明:Java泛型是JavaSE5引入的一种新特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。然而,Java泛型的实现背后有一个重要的概念——类型擦除,理解这一点对于深入掌握泛型编程至关重要。问题要求:解......
  • 如何使用javadoc?为什么需要这个源代码文档工具
    目录一、什么是javadoc二、javadoc为什么会找不到路径三、如何解决javadoc一直找不到路径的问题一、什么是javadocJavadoc是一种用于生成Java源代码文档的工具,它可以帮助开发者生成易于阅读和理解的文档。Javadoc通过解析Java源代码中的注释,提取其中的文档信息,然后......
  • Java 方法中循环调用具有事务的方法
    在Java中,循环调用一个具有事务的方法时,需要特别注意事务的边界和管理。通常,事务的边界是由框架(如Spring)来控制的,确保方法执行时数据的完整性和一致性。然而,在循环中调用事务方法时,每个调用都可以被视为独立的事务,除非特别配置以允许跨多个方法调用共享同一事务。1.Java方法......
  • 基于java+springboot+vue实现的图书商城管理系统(文末源码+Lw)283
     摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理......
  • 基于java+springboot+vue实现的旅游推荐系统(文末源码+Lw)280
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装旅游推荐系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,旅游推荐系统的有效......
  • 基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277
     摘    要在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升,也为了对流浪动物信息进行更好的维护,流浪动物管理系统的出现就变得水到渠成......
  • 基于java+springboot+vue实现的药店管理系统(文末源码+Lw)285
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,药品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的药店管理系统。本药店......
  • 基于java+springboot+vue实现的药店管理系统(文末源码+Lw)285
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,药品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的药店管理系统。本药店......
  • Java面试八股之MySQL存储引擎都有哪些
    MySQL存储引擎都有哪些MySQL提供了多种存储引擎,每种引擎都有其独特的特性和用途。以下是一些常用的MySQL存储引擎:InnoDB默认存储引擎(自MySQL5.5版本起)。支持事务(ACID属性)、行级锁定和外键约束。使用B+树作为索引结构。适合需要高并发的事务处理和高可靠性的场景。MyISA......