`
jungle1171
  • 浏览: 3937 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

[JAVA]复习各种排序算法--快排

阅读更多

一直在WEB上头忙活,SSH啦,EXT啦,Flex啦,乱七八糟的前端、框架。

近日由于一个机会警醒了作为基础的算法已经差劲到一定地步了~~~

先补了补排序算法,贴点自己的代码上来,都是已经运行过的。看了看时间,排10个数字不到1ms,进入排序方法10次。。。快。。。真快。。。

快排基本思想http://jackey25.iteye.com/blog/456646这位哥们已经说的非常清楚了。。。

public class QuickSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		QuickSort qs = new QuickSort();
		int[] toSort = new int[] { 2, -8, 99, 0, -1, 37, 43, 88, 2, 82 };
		long ss = System.currentTimeMillis();
		toSort = qs.quickSort(toSort, 0, 0, toSort.length - 1);
		println(System.currentTimeMillis() - ss);
		printAll(toSort);
	}

	//int cnt;
	/**
	 * @param toSort
	 * @param standard 作为比较标准数值的位置
	 * @param left 左端起点位置
	 * @param right 右端起点位置
	 */
	private int[] quickSort(int[] toSort,int standard, int left, int right) {
		//print(cnt++ +"| standard: "+standard+",left:"+left+",right:"+right+": ");
		//记住起始结束的位置
		int l = left;
		int r = right;
		//没有相遇,则一直移动
		while(l < r){
			while(r > left && l < r){
				//从右侧找到第一个小于标准数值的,结束右端本次查找
				if(toSort[r] < toSort[standard]){
					swap(toSort,r,standard);
					break;
				}
				r--;
			}
			while(l < right && l < r){
				//从左侧找到第一个大于标准数值的,结束左端本次查找
				if(toSort[l] > toSort[standard]){
					swap(toSort,l,standard);
					break;
				}
				l++;
			}
		}
		//没有小到1个元素1组之前继续分组
		if(l > left){
			quickSort(toSort,left,left,l-1);
		}
		if(r < right){
			quickSort(toSort,r+1,r+1,right);
		}
		return toSort;
	}

	/**
	 * 交换数值
	 */
	private int[] swap(int[] toSort, int i, int j) {
		int temp = toSort[i];
		toSort[i] = toSort[j];
		toSort[j] = temp;
		return toSort;
	}

	private static void printAll(int[] toSort) {
		for (int i = 0; i < toSort.length; i++) {
			System.out.print(toSort[i] + ",");
		}
		System.out.println();
	}
}
分享到:
评论

相关推荐

    堆排序详细图解(通俗易懂)+排序算法-堆排序(超详细)

    堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法...

    详解Java常用排序算法-选择排序

    详解Java常用排序算法-选择排序 选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是每次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。 选择...

    详解Java常用排序算法-快速排序

    快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到...

    各种排序算法比较(java实现)

    本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...

    [Java算法-排序]-堆排序.java

    该资源提供了Java中实现堆排序的全面指南。文档中涵盖了堆排序的基本概念,包括如何对数组进行排序以及如何在Java中实现堆排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现堆排序,包括详细的代码示例和...

    [Java算法-排序]-插入排序.java

    该资源提供了Java中实现插入排序的全面指南。文档中涵盖了插入排序的基本概念,包括如何对数组进行排序以及如何在Java中实现插入排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现插入排序,包括详细的...

    详解Java常用排序算法-计数排序

    Java 排序算法 - 计数排序 计数排序(Counting Sort)是一种非比较排序算法,它的基本思想是统计数组中每个元素出现的次数,然后根据元素出现的次数依次将元素放入有序的数组中。计数排序时间复杂度为 O(n+k),其中...

    详解Java常用排序算法-希尔排序

    希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是将待排序的数组按照一定的间隔进行分组,对每组使用插入排序算法进行排序,然后缩小间隔,再对分组进行排序,直到间隔为1 为止。逐渐减小间隔大小的...

    详解Java常用排序算法-冒泡排序

    Java排序算法之冒泡排序详解 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成...

    详解Java常用排序算法-堆排序

    在上面的代码中,我们使用 Java 语言实现了堆排序算法。其中,Heap 类中包括两个函数:heapSort 和 heapify。heapSort 函数接受一个整数数组作为输入,并使用堆排序算法对该数组进行排序。heapify 函数用于对一个...

    java实现国密算法gm-java-main.zip

    java实现国密算法gm-java-main.zip

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    java排序算法--Arrange(java算法源码)

    //表示待排数组的元素个数。 private long numLeft;//用于存储剩余排列序列个数的成员变量。 private long total;//用于存储排列序列总数的成员变量。 public Arrange(int n){ this.n=n; reset();//调用...

    Java各种排序算法代码.zip

    这个名为"Java各种排序算法代码.zip"的压缩包包含了一系列实现不同排序算法的Java源代码。排序算法是计算机科学中的基本概念,用于对一组数据进行排列。下面将详细讨论这些算法及其在Java中的实现。 1. 冒泡排序...

    lz4压缩算法java实现-LZ4-极快的压缩算法,排序算法数据结构 最快的排序算法

    LZ4压缩算法java实现 LZ4压缩算法是lossless压缩算法,提供了高达500 MB/s每个核心的压缩速度,且可以根据多核CPU进行扩展。它具有极快的解压速度,速度可达多GB/s每个核心,通常达到多核系统中的RAM速度限制。速度...

    Java数据结构和算法-带书签目录扫描版

    《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...

    常用排序算法--堆排序

    常用的排序算法--堆排序,通过创建堆的方法进行排序

    java代码-使用java解决java排序之-快速排序的问题的源代码

    java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    Java各种排序算法(含代码)

    以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)**插入排序(直接插入排序、希尔排序)** - **直接插入排序**:它是一种简单的排序算法,工作原理类似于打扑克牌。遍历数组...

Global site tag (gtag.js) - Google Analytics