快速排序(整数)的C语言代码和JAVA代码

一、问题描述

我们目前有一些数据,这些数据都是整数,然后我们现在需要做的就是把这些数据按照小到大排一下,然后输出出来。

二、问题的解决办法

首先确认一下分界点,我们常见的分界点是第一个点,第二个点,中间的一个点;

然后我们调整一下范围,也就说所有小于等于某个点的值在左半边,大于等于某个点的值在右半边。

递归处理左右两端。

案例如下:

我们首先手头有一些数据,这些数据我们为了好排序,可以把他们都放在数组当中,这样每个数据都有一个下标了,也就确定了它们的位置。如下:

快速排序(整数)的C语言代码和JAVA代码

 

 

 这个时候我们选好了分界值,如上所示,为8。下一步我们就进行位移:

快速排序(整数)的C语言代码和JAVA代码

 

 快速排序(整数)的C语言代码和JAVA代码

 

 由于8=8,所以i静止不动,9>8,这就使得j--;如下:

快速排序(整数)的C语言代码和JAVA代码

 

 三、代码实现:

C:

#include<stdio.h>
const int N=1e6+10;

int n;
int q[N];

void quick_sort(int q[],int l,int r){
    if(l>=r) return ;//判定边界

    int x=q[l],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 t=q[i];
            q[i]=q[j];
            q[j]=t;
        }
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&q[i]);

    quick_sort(q,0,n-1);

    for(int i=0;i<n;i++) printf("%d ",q[i]);
    return 0;
}

JAVA:

import java.util.Scanner;;
public class quick_sort {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[100010];
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        quick_s(arr,0,n-1);
        for(int i=0;i<n;i++){
            System.out.printf("%d ",arr[i]);
        }
    }
    public static void quick_s(int q[],int l ,int r) {
        int i=l-1;
        int j=r+1;
        int x=q[l+r>>1];
        if(l>=r) return;
        while(i<j){
            do i++;while(x>q[i]);
            do j--;while(x<q[j]);
            if(i<j){
                int t=q[i];
                q[i]=q[j];
                q[j]=t;
            }
            quick_s(q, l, j);
            quick_s(q, j+1, r);
        }
    }
}

 

原文链接:https://www.cnblogs.com/TomHard/p/17255547.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速排序(整数)的C语言代码和JAVA代码 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 京东LBS推荐算法实践

    作者:京东零售 郑书剑 1、推荐LBS业务介绍 1.1 业务场景 现有的同城购业务围绕京东即时零售能力搭建了到店、到家两种业务场景。同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主站复访复购频次,是零售的重要战略方向。 1.2 名词解释 LBS:基于位置的服务(Location Based Services)。 下文LBS商品代指京东小时…

    算法与数据结构 2023年4月17日
    00
  • Python解决非线性规划中经济调度问题

    以下是关于“Python解决非线性规划中经济调度问题”的完整攻略: 简介 经济调度问题是一种常见的非线性规划问题,它涉及到如何分配有限的资源以最大化效益。在本教程中,我们将介绍如何使用Python解决经济调度问题,包括如何建立模型、如何求解模型以及如何分析结果。 经济调度问题建模 经济调度问题的目标是将有限的资源分配给不同的任务,以最大化效益。我们可以使用线…

    python 2023年5月14日
    00
  • C++高级数据结构之优先队列

    C++高级数据结构之优先队列 什么是优先队列? 优先队列是一种特殊的队列,其中每个元素都有一个优先级。当加入一个元素时,它会被放置在队列中的适当位置,以确保优先级最高的元素位于队头。从队列中取出元素时,总是从队头删除元素。 优先队列的应用 优先队列的常见应用场景包括: 操作系统任务调度 网络传输协议TCP中的拥塞控制算法 各种图像算法如边缘检测等 C++中S…

    数据结构 2023年5月17日
    00
  • 线段树好题! P2824 [HEOI2016/TJOI2016]排序 题解

    题目传送门 前言 线段树好题!!!!咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。 题意 给定一个 \(1\) 到 \(n\) 的排列,有 \(m\) 次操作,分两种类型。1.0 l r表示将下标在 \([l, r]\) 区间中的数升序排序。2.1 l r表示将下标在 \([l, r]\) 区间中的数降序排序。给定一个数 \(q\) 询问…

    算法与数据结构 2023年4月17日
    00
  • python K近邻算法的kd树实现

    以下是关于“Python K近邻算法的kd树实现”的完整攻略: 简介 K近邻算法是一种常用的分类算法,它通过计算样本之间的距离来确定最近的K个邻居,并使用它们的标签来预测新样本的标签。kd树是一种常用的数据结构,它可以加速K近邻算法的计算。本教程将介绍如何使用Python实现K近邻算法的kd树实现,并提供两个示例。 K近邻算法 K近邻算法是一种常用的分类算法…

    python 2023年5月14日
    00
  • 算法总结–ST表

    声明(叠甲):鄙人水平有限,本文为作者的学习总结,仅供参考。 1. RMQ 介绍 在开始介绍 ST 表前,我们先了解以下它以用的场景 RMQ问题 。RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ…

    算法与数据结构 2023年4月18日
    00
  • 深入解析MySQL索引数据结构

    深入解析MySQL索引数据结构 MySQL索引是优化查询效率的重要一环,本文将深入解析MySQL索引数据结构,帮助读者理解MySQL索引原理,并通过两个示例说明不同类型的索引在实际应用中的效果。 索引数据结构 MySQL支持两种类型的索引数据结构:B-Tree索引和Hash索引。 B-Tree索引 B-Tree索引是MySQL常用的索引类型,用于优化WHER…

    数据结构 2023年5月17日
    00
  • Python实现的三层BP神经网络算法示例

    以下是关于“Python实现的三层BP神经网络算法示例”的完整攻略: 简介 BP神经网络是一种常见的人工神经网络,它可以用于分类和回归问题。本教程将介绍如何使用Python实现三层BP神经网络算法,并讨论如何使用该算法进行分类。 步骤 1.导入库和数据 首先,我们需要导入必要的库,包括numpy和pandas。在Python中,可以使用以下代码导入这些库: …

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部