快速排序算法(C & Java 实现)

Java实现快速排序 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列。 2 解决方案 2.1 快速排序原理简介 引用自百度百科: 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整... 阅读详情

C语言版 

#include <stdio.h>

void disp_array( int a[], int n )
{
    int i;
    for( i = 0; i < n; ++i )
        printf( "%d ", a[i] );
    printf( "\n" );
}

int partition( int a[], int low, int high )
{
    int piv_val = a[low];
    while( low < high )
    {
        while( low < high && a[high] >= piv_val ) --high;
        a[low] = a[high];
        while( low < high && a[low] <= piv_val ) ++low;
        a[high] = a[low];
    }
    a[low] = piv_val;
    return low;
}

void qsort_recur( int a[], int low, int high )
{
    int idx_piv;
    if( low < high )
    {
        idx_piv = partition( a, low, high );
        qsort_recur( a, low, idx_piv - 1 );
        qsort_recur( a, idx_piv + 1, high );
    }
}

void quick_sort( int a[], int n )
{
    qsort_recur( a, 0, n - 1 );
}

int main()
{
    int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
    int n = 8;
    
    printf( "Before sorting: " );
    disp_array( a, n );

    quick_sort( a, n );

    printf( "After sorting: " );
    disp_array( a, n );

    return 0;
}

Java语言版

public class TestSort {
	
	public static void dispArray( int a[] ) {
		for( int i = 0; i < a.length; ++i )
			System.out.print( a[i] + " " );
		System.out.println();
	}
	
	/*
	 * quick sort
	 */
	private static int partition( int [] a, int low, int high ) {
		int pivKey = a[low];
		while( low < high ) {
			while( low < high && a[high] >= pivKey ) 
				--high;
			a[low] = a[high];
			while( low < high && a[low] <= pivKey ) 
				++low;
			a[high] = a[low];
		}
		a[low] = pivKey;
		return low;
	}
	
	private static void qsort( int [] a, int low, int high ) {
		int pivKeyPos;
		if( low < high ) {
			pivKeyPos = partition( a, low, high );
			qsort( a, low, pivKeyPos - 1 );
			qsort( a, pivKeyPos + 1, high );
		}
	}
	
	public static void quickSort( int [] a ) {
		qsort( a, 0, a.length - 1 );
	}
	
	public static void main( String[] args ) {
		int a[] = { 100, 49, 38, 65, 97, 76, 13, 27, 49 };
		System.out.print( "Before sorting: " );
		dispArray( a );
		
		quickSort( a );
		
		System.out.print( "Quick sorting: " );
		dispArray( a );
		System.out.println();
	}
}
C程序设计语言(K&amp;R)清晰中文版.pdf 立即下载

相关推荐

Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++

部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..

zaibeijixing的专栏 1万+

数据结构与算法.04快速排序

快速排序 首先呢,快速排序是对冒泡排序的一种改进。基本思想是:通过一趟排序将待排序的数据分为独立的两部分,其中一部分的所有数据都比另一部分的所有数据都小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以完成排序。 排序原理(以数组为例) 1.首先设定一个分解值,通过改分界值将数组分为左右两部分; 2.将&gt;=分界值的数据放到数组右边,小于分界值的数据放到左边。此时左边部分都&lt;=分界值,右边部分都&gt;=分界值; 3.对于左右边的数据可进行独立排序。对于左侧的数据,又

weixin_52735772的博客 324

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2925

K&R快速排序的解释

#include void quicksort(int* data, int low, int high) ; int main() { int arr[]={67,23,89,35,28,90,10,24}; quicksort(arr,0,7); for(int i=0;i<8;i++) printf("%d ",arr[i]); } void quicksort(int *arr,

swudxp的专栏 581

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1106

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 713

快速排序(K&R)

/**qsort.c: quick sort. divide-and-conquer  */ #include void qsort(int v[], int left, int right); main(void) {     int i=0;     int a[5] = {5,4,3,2,1};     qsort(a, 0, 4);     while(i

Brave master的专栏 2225

sentaurus学习笔记(HFET_pGate_GaN仿真)(九)

`(sdedr:define-constant-profile-placement "Ohmic.s" "Ohmic" "Pl.ohmic.s" 0.002)`这一行将`"Ohmic"`掺杂剖面放置在`"Pl.ohmic.s"`参考评估窗口中,同样`0.002`可能表示掺杂剖面在窗口中的偏移量或其他参数。欧姆接触是半导体器件中的一种低阻抗电气接触,通常需要高掺杂来减少接触电阻并提高器件性能。通过这些步骤,SDE能够为器件的源极和漏极区域设置高掺杂的欧姆接触,这对于确保器件的高性能和低接触电阻至关重要。

qq_52640792的博客 1382

K&R书评

我们应该如何对待经典? 首先要给它一个合理的定位,这不是一本入门书籍,也不是一门讲述如何避免C的一些常见错误的书籍,而是一本提高自己对C语言认识的书籍。仅仅使用了不到300页,就把C语言的方方面面展现的淋漓尽致。作者通过这本书,向人们展示了C语言能够做什么。同事作者试图向人们传达的这样一种态度:程序要写的短小漂亮!也许这与工业化生产要求的代码规范化有一定差距,但这代表了科学家的一种追求卓越的态度

thefutureisour的专栏 1891

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2979

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 517

Java实现 蓝桥杯 算法提高 快速排序

试题 算法提高 快速排序 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   用递归来实现快速排序(quick sort)算法。快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x。首先对数组中的元素进行调整,使x放在正确的位置上。同时,所有比x小的数都位于它的左边,所有比x大的数都位于它的右边。然后对于左、右两段区域,递归地调用快速排序算法来进行排序。 ...

南 墙 1万+

windows使用jupyter notebook读取文件路径的几种方法和设置默认打开路径

简单分享小虎这段时间以来学到的jupyter notebook操作技巧。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 1万+

【双路快速排序算法】详解:原理、图示与Java实现

双路快速排序是快速排序的改进版本,由C. A. R. Hoare提出,主要用于解决**含有大量重复元素**数组的排序问题。相比传统快速排序,它能更均衡地分配重复元素,避免分区不平衡导致的性能下降。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7212

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【随机化快速排序算法】详解:原理、图示与Java实现

快速排序(Quick Sort)是由英国计算机科学家C. A. R. Hoare于1960年提出的经典排序算法。随机化快速排序是其改进版本,通过引入随机性来避免最坏情况的发生。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 8158

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java、C语言实现快速排序算法

代码: #include #include int   findpivot(); int   partion (); void  quicksort (); int main() {     int n,i;     printf("请输入需要排序的元素的个数:");     scanf("%d",&n);     int a[n];     for(i = 0;i

即使没人看我也要写 744

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java玩转《啊哈算法》排序之快速排序

搭嘎好!本人最近看的《啊哈算法》这本书写的确实不错,生动形象,在保持算法讲解准确性的同时又不失趣味性。但对我来说,稍显遗憾的是,书籍代码是c语言,而不是本人常用的Java。那就弥补遗憾,说干就干,把这本书的示例语言用java给翻译一遍!!!于是就有了本篇博客,这是第三篇博客,主要讲解快速排序。

Qizhi_Hu的博客 1336

十大排序算法之——快速排序算法(Java实现)及思路讲解

快速排序是一种非常高效的排序算法,其平均时间复杂度为O(n log n),并且由于原地排序的特性,它不需要额外的存储空间。快速排序的基本思想是:通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。另外,快速排序的空间复杂度是O(log n),这是因为递归调用需要使用栈空间,栈的深度在最坏情况下是O(n),但平均情况下是O(log n)。

一叶浮萍归大海的博客 1837

快速排序算法原理及Java代码实现

快速排序算法原理及Java代码实现1 基本思想1.1 意义1.2 简单解释1.3 基本思想1.4 图示2 Java代码实现快速排序 1 基本思想 1.1 意义 快速排序是冒泡排序的改进版,也是最好的一种内排序,还涉及到分治和递归 1.2 简单解释 冒泡排序中记录的比较和交换是在相邻的单元中进行,每次交换只能上移或下移一个单元,因而总的比较和移动次数较多 1.3 基本思想 ①先从数列中取出一个数作为...

Yuqbd的博客 1413

用java实现快速排序算法

1、算法思想     快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想     分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想     设当前待排序的

a274915611的专栏 9494

java基础-快速排序算法Java实现

快速排序算法Java实现 1 算法概念。 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。 2 算法思想。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 3 实现思路。 ①以第一个关键字 K...

染小柒的博客 950

Java实现快速排序算法

快速排序算法的思想是:在数组中选取一个数(一般都是选第一个数),分别与其它的每一个数比较,把比这个数小的数放到它的前面,比他大的数放到它的后面,此时数组分成两部分,该数前面的都比它小,后面的都比它大,然后分别对这两部分递归排序算法,就可以实现整个数组的排序。public static void main(String[] args) { int [] arr = {65,58,95,...

IBLiplus的博客 6870

十大排序算法快速排序之Java实现

快速排序 快速排序(Quick Sort)是对冒泡排序的一种改进,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数。 快速排序在1960年由查尔斯·安东尼·理查德·霍尔(Charles Antony Richard Hoare,缩写为C. A. R. Hoare)提出,昵称为东尼·霍尔(Tony Hoare)。 算法步骤 从数组中选择一个轴点元素(pivot),假设每次都选择索引为0的元素为轴点元素。 利用pivot将数组分割成2个子数组,将小于pivot的元素放在pivot前面(左侧)

morris 1万+

快速排序在C语言和java下的实现

1. 快排的原理 时隔多日我们在被要求去写一个快速排序的时候可能无从下手,对于一个算法的考单纯的记忆不足以牢牢掌握它,深刻理解其机制才是学习算法的重要手段。 下面我们来解读一下快速排序。 快速排序由东尼·霍尔所发展。快速排序通常明显比其他 Ο(nlogn) 算法更快。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)

qq_41098158的博客 295

java实现冒泡、选择、快速排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类

cruise技术博客 1万+

快速排序中的分割算法实现

这里介绍快速排序使用到的两种分割算法。 对于快速排序而言,先选定一个枢轴元素,以枢轴元素为基准比枢轴元素小的元素放在枢轴元素的左边,比枢轴元素大的元素放在枢轴元素的右边。这就是一次分割过程。 1,先介绍第一种分割算法 该算法是《算法导论》中描述的PARTITION过程。这个分割的思想应该有很多应用,比如应用到快速排序中,再比如应用到如果获取中位数(或者给定一组数,找出其中第K小的元素) 该

hapjin的专栏 3724
上一篇: 简单选择排序(C & Java 实现)
下一篇: 堆排序算法(C & Java 实现)
fduan
博客等级 码龄18年 56粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值