快速排序(整数)的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日

相关文章

  • Python 深入了解opencv图像分割算法

    Python深入了解OpenCV图像分割算法 OpenCV是一个广泛使用的计算机视觉库,它提供了许多图像处理和计算机视觉算法。其中,图像分割是计算机视觉中的重要问题,它的目标是将图像分成不同的区域,每个区域具有相似的特征。在本文中,我们将深入了解OpenCV中的图像分割算法,并提供两个示例说明。 图像分割算法 图像分割算法可以分为两类:基于区域的分割和基于边…

    python 2023年5月14日
    00
  • Python图像运算之顶帽运算和底帽运算详解

    Python图像运算之顶帽运算和底帽运算详解 介绍 顶帽运算和底帽运算是图像处理中常用的一种形态学运算,它们可以用于图像的增强和特征提取。本文将详细介绍顶帽运算和底帽运算的原理和实现方法,并提供两个示例说明。 顶帽运算 顶帽运算是一种形态学运算,它可以用于图像的增强和特征提取。顶帽运算原理是:先对图像进行腐蚀操作,然后对腐后的图像进行膨胀操作,最后将原图像减…

    python 2023年5月14日
    00
  • Python中22个万用公式的小结

    下面是详细讲解“Python中22个万用公式的小结”的完整攻略。 1. 求和公式 求和公式是Python中最基本的公式之一,用于计算一组数的和。求和公式的数学表示如下: $$\sum_{i=1}^{n} a_i = a_1 + a_2 + … + a_n$$ 其中,$a_i$表示第$i$个数,$n$表示数的个数。 下面是Python实现求和公式的示例: …

    python 2023年5月14日
    00
  • Python实现的数据结构与算法之基本搜索详解

    Python实现的数据结构与算法之基本搜索详解 在计算机科学中,搜索指的是在一组数据中找到目标数据的过程。搜索算法是解决各种问题的关键,即使是拼图游戏和图像识别也要依赖搜索算法。本文将介绍基本的搜索算法,包括线性/顺序搜索、二分搜索和广度优先搜索。 线性/顺序搜索 顺序搜索又称为线性搜索,它遍历整个数据集以查找特定元素。顺序搜索可以用于查找未排序的列表。该算…

    数据结构 2023年5月17日
    00
  • Python实现的数据结构与算法之链表详解

    下面是详细讲解“Python实现的数据结构与算法之链表详解”的完整攻略,包括链表的定义、链表的基本操作链表的应用和两个示例说明。 链表定义 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点,如果链表为空,则头节点和尾节点都为None。 链表基本操作 链表的基操作包括插入、…

    python 2023年5月14日
    00
  • Python实现的朴素贝叶斯算法经典示例【测试可用】

    Python实现的朴素贝叶斯算法经典示例【测试可用】详细攻略 朴素贝叶斯算法是一种常见分类算法,它基于贝叶斯定理和特征条件独立假设,可以用于文本分类、圾邮件过滤、情感分析等领域。在本文中,我们将介绍Python实现的朴素贝叶斯算法经典示例,并提供测试代码。 朴素贝叶斯算法原理 朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它假设每个特征之间是相互独立的,即特…

    python 2023年5月14日
    00
  • python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    以下是关于“Python聚类算法解决方案”的完整攻略: 简介 聚类算法是一种常见的机器学习算法,它可以将数据集分成不同的组或簇。在本教程中,我们将介绍如何使用Python实现聚类算法,并提供一些示例说明。 Python聚类算法实现 Python中有多种聚类算法可供选择,包括K-Means、层次聚类、DBSCAN等。以下是使用K-Means算法实现聚类的示例:…

    python 2023年5月14日
    00
  • python实现动态规划算法的示例代码

    Python实现动态规划算法的完整攻略 动态规划算法是一种常用的算法,它可以用于解决多种实际问题。在本文中,我们将介绍动态规划算法的基本原理,并提供两个示例,以说明如何使用Python实现动态规划算法。 动态规划算法的基本原理 动态规划算法是一种通过将问题解成子问题来求解复杂问题的算法。在动态规划算法中,我们通常使用一个数组来存储子问题的解,避免重复计算。动…

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