Java实现快速排序

这篇具有很好参考价值的文章主要介绍了Java实现快速排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.原理

快速排序算法通过多次比较和交换来实现排序,其排序流程如下: 

 (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。 

(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 

(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成

例: int[] test_arr[9]={3,1,2,9,7,8,6,5,4};

        其"快速排序"的过程输出如下:

                     3 1 2 4 7 8 6 5 9 
                     1 3 2 4 7 8 6 5 9 
                     1 2 3 4 7 8 6 5 9 
                     1 2 3 4 7 8 6 5 9 
                     1 2 3 4 5 8 6 7 9 
                     1 2 3 4 5 8 6 7 9 
                     1 2 3 4 5 8 6 7 9 
                     1 2 3 4 5 8 6 7 9 
                     1 2 3 4 5 6 8 7 9 
                     1 2 3 4 5 6 7 8 9 

二.源代码文章来源地址https://www.toymoban.com/news/detail-488222.html

public static  void QucikSort(long[] arr) {
		int n=arr.length;
		if(n>1){quicksort_start(arr,0,n-1);}
		else {return;}
	}
	
	private static void quicksort_start(long[] arr,int left,int right) {	
		if(left>=right)return;
		int l_pos=left;
		int r_pos=right;
		int pos=right;
		long battle=arr[pos];
		while(l_pos<r_pos)
		{
			while(arr[l_pos]<=battle&&l_pos<r_pos)
			{
				l_pos++;
			}
			while(arr[r_pos]>=battle&&l_pos<r_pos)
			{
				r_pos--;
			}
			if(l_pos<r_pos)
			{
				long tem=arr[l_pos];
				arr[l_pos]=arr[r_pos];
				arr[r_pos]=tem;
			}
			if(l_pos==r_pos)
			{
				arr[pos]=arr[l_pos];
				arr[l_pos]=battle;
			}
		}
		if(l_pos==r_pos)
		{
			quicksort_start(arr,0,l_pos-1);
			quicksort_start(arr,r_pos+1,right);
		}
	}

到了这里,关于Java实现快速排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 六大排序算法(Java版):从插入排序到快速排序(含图解)

    目录 插入排序 (Insertion Sort) 直接插入排序的特性总结: 选择排序 (Selection Sort) 直接选择排序的特性总结 冒泡排序 (Bubble Sort)  冒泡排序的特性总结 堆排序(Heap Sort) 堆排序的特性总结 希尔排序 (Shell Sort)   希尔排序的特性总结 快速排序(Quick Sort) Hoare版  挖坑法  前后指

    2024年02月09日
    浏览(52)
  • (九)Java算法:快速排序(详细图解)

    1.1、概念    快速排序 :用数组的第一个数作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生

    2024年02月10日
    浏览(53)
  • 排序算法-----快速排序(非递归实现)

    目录 前言 快速排序  基本思路  非递归代码实现 算法分析 空间复杂度 时间复杂度 稳定性         很久没跟新数据结构与算法这一栏了,因为数据结构与算法基本上都发布完了,哈哈,那今天我就把前面排序算法那一块的快速排序完善一下,前面只发布了快速排序递归算法

    2024年01月21日
    浏览(41)
  • 【排序算法】 快速排序(快排)!图解+实现详解!

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 算法—排序篇 🌄 莫道桑榆晚,为霞尚满天! 什么是快排?快排的速度到底有多快呢?它们的思想和实现是什么样的? 本文会对这快速排序进行详解,绝对细致入微!让你彻底搞懂快排! 英国计算机科学家Tony Hoare在1960年为了解决计算

    2024年02月05日
    浏览(40)
  • 排序算法 - 快速排序(4种方法实现)

    本篇文章的源代码在这,需要自取:Gitee 快速排序是一种常见的排序算法,其基本原理是分治和递归。它的基本思路是,在数组中选择一个元素作为基准值,然后将数组中小于基准值的元素移动到它的左边,大于基准值的元素移动到它的右边。然后对左右两个子数组递归地重

    2024年02月04日
    浏览(41)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序,堆排序】超详细~~

    目录 冒泡排序(BubbleSort): 代码详解:  冒泡排序的优化:  选择排序(SelectSort): 代码详解:  插入排序(InsertSort): 代码详解:  希尔排序(ShellSort):  法一(交换法)代码详解:  法二(移位法--插入排序的优化)代码详解: 快速排序(QuickSort):  代码详解:  归并排

    2024年02月20日
    浏览(48)
  • python实现快速排序算法

    1. 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行

    2024年02月06日
    浏览(46)
  • 实现快速排序算法

    快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1) 首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2) 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部

    2024年02月16日
    浏览(25)
  • C语言实现快速排序算法

    快速排序的核心思想是通过分治法(Divide and Conquer)来实现排序。 算法的基本步骤是: 1. 选择一个基准值(通常是数组中的某个元素),将数组分成两部分,使得左边的部分所有元素都小于基准值,右边的部分所有元素都大于基准值。 2. 对这两部分分别进行递归排序,直到整

    2024年04月15日
    浏览(33)
  • 【排序算法】推排序算法解析:从原理到实现

    目录 1. 引言 2. 推排序算法原理 3. 推排序的时间复杂度分析 4. 推排序的应用场景 5. 推排序的优缺点分析 5.1 优点: 5.2 缺点: 6. Java、JavaScript 和 Python 实现推排序算法 6.1 Java 实现: 6.2 JavaScript 实现: 6.3 Python 实现: 7. 总结         推排序(Heap Sort)是一种高效的排序算法,

    2024年03月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包