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

yizhihongxing

一、问题描述

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

二、问题的解决办法

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

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

递归处理左右两端。

案例如下:

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

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

相关文章

  • 数据结构之线性表

    Linear_list 类型定义 一个线性表是n个数据元素的有限序列,线性表中的元素个数n定义为线性表的长度,n=0时成为空表;抽象数据类型: InitList(&L) //构造空线性表L DestroyList(&L) //销毁线性表L ClearList(&L) //将L重置为空表 ListEmpty(L) //若L为空表返回TR…

    算法与数据结构 2023年4月25日
    00
  • C语言数据结构之学生信息管理系统课程设计

    C语言数据结构之学生信息管理系统课程设计 介绍 本文讲解学生信息管理系统的设计过程,包括需求分析、设计思路、实现步骤等。 需求分析 学生信息管理系统是一种常见的数据结构应用场景。通过该系统,可以实现对学生信息的有效管理和查询。在设计之前,我们需要明确系统的需求和功能,包括: 学生信息的录入、删除、修改和查询; 各类信息的统计和分析,如学生总数、男女比例等; …

    数据结构 2023年5月17日
    00
  • 遗传算法python版

    下面是关于“遗传算法Python版”的详细讲解。 1. 遗传算法的基本原理 遗传算法是一种基于自然选择和遗传学原理的优化算法,它通过模拟生物进化过程来寻找最优解。遗传算法的基本流程如下: 初始化种群:随机生成一组初始解作为种群。 选择:根据适应度函数选择一部分优秀的个体作为父代。 交叉:将父代个进行交叉操作,生成新的子代个体。 变异:对子代个体进行变异操作,…

    python 2023年5月13日
    00
  • Python实现调度算法代码详解

    Python实现调度算法代码详解 调度算法是一种常用的算法,它可以用于优化任务的执行顺序,从而提高任务的执行效率。在Python中,可以多种法实现调度算法,如贪心算法、动态规划算等。本文将详细讲解Python实现调度算的整攻略,包括算法原理、Python实现过程和示例。 算法原理 调度算法的基本思想是根据任务的执行时间和优先级,确定任务的执行顺序,从而提任务…

    python 2023年5月14日
    00
  • 详解Python查找算法的实现(线性,二分,分块,插值)

    下面是关于“详解Python查找算法的实现(线性,二分,分块,插值)”的完整攻略。 1. 查找算法概述 查找算法是一种用在数据集合中查找特定元素的算法。常见的查找算法包括线性查找、二分查找、分块查找和插值查找。在Python中,我们可以使用各种数据结构和算法实现这些查找算法。 2. 查找算法实现 2.1 线性查找 线性查找是一种简单的查找算法,它的基本思想是…

    python 2023年5月13日
    00
  • Java数据结构与算法学习之循环链表

    Java数据结构与算法学习之循环链表 本文将详细介绍Java数据结构中的一种链表类型——循环链表,并讲解如何使用Java实现循环链表。同时,本文也提供了两个示例,方便读者更好地理解和运用循环链表。 什么是循环链表 循环链表是一种链表,它与单向链表和双向链表不同之处在于它的最后一个结点指向第一个结点。这就形成了一个循环链,因此称之为循环链表。 如何实现循环链表…

    数据结构 2023年5月17日
    00
  • Java数据结构之顺序表篇

    Java数据结构之顺序表篇 什么是顺序表 顺序表是由一组地址连续、大小相等的存储单元依次存储数据元素的线性表。 顺序表的表示 Java语言中,可以使用数组来表示顺序表。 public class SeqList<T> { private Object[] element;// 定义数组存储数据元素 private int length;// 当前…

    数据结构 2023年5月17日
    00
  • 一文学会数据结构-堆

    一文学会数据结构-堆 什么是堆 在计算机科学中,堆是一个特殊的树状数据结构。堆通常有如下几个特性: 堆是完全二叉树; 堆中每个节点的值都大于或等于(小于或等于)其子节点的值,这个取值规则称为堆的“属性”; 堆顶元素(即根节点)总是为最大值或最小值。 堆的种类 堆分为小根堆和大根堆两种。小根堆要求每个节点的值都不大于其父节点的值,即A[PARENT[i]] &…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部