一直在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常用排序算法-选择排序 选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是每次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。 选择...
Java哈希算法排序算法数据结构知识点总结 以下是关于Java哈希算法排序算法数据结构的知识点总结: 1. 哈希算法的速度问题:在讨论哈希算法的速度问题时,需要考虑到哈希函数的选择和实现方式。在大多数情况下,...
本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...
该资源提供了Java中实现堆排序的全面指南。文档中涵盖了堆排序的基本概念,包括如何对数组进行排序以及如何在Java中实现堆排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现堆排序,包括详细的代码示例和...
//表示待排数组的元素个数。 private long numLeft;//用于存储剩余排列序列个数的成员变量。 private long total;//用于存储排列序列总数的成员变量。 public Arrange(int n){ this.n=n; reset();//调用...
LZ4压缩算法java实现 LZ4压缩算法是lossless压缩算法,提供了高达500 MB/s每个核心的压缩速度,且可以根据多核CPU进行扩展。它具有极快的解压速度,速度可达多GB/s每个核心,通常达到多核系统中的RAM速度限制。速度...
《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...
常用的排序算法--堆排序,通过创建堆的方法进行排序
java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
**插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。这种算法对大数据量的处理效率较低,但对于小规模数据或者部分有序的...
- 快速排序:使用分治策略,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再分别对这两部分记录继续进行排序。平均时间复杂度为O(N log N),最坏情况下为O(N^2)...
以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)**插入排序(直接插入排序、希尔排序)** - **直接插入排序**:它是一种简单的排序算法,工作原理类似于打扑克牌。遍历数组...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...
《JAVA数据结构与算法-第二版》是一本深入探讨计算机科学基础的著作,由美国知名计算机科学家Robert Lafore撰写,并由计晓云、赵研等人精心翻译为中文版。本书旨在帮助读者理解并掌握如何在Java编程环境中有效地设计...
Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客
**选择排序**是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法,因为它可能会...
在IT面试和笔试中,掌握各种排序算法的实现是必不可少的技能。本文将详细介绍几种经典的排序算法,并提供Java语言的实现代码,包括冒泡排序、插入排序、选择排序和快速排序。这些算法不仅在面试中常被考察,而且在...
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!