- 浏览: 196019 次
- 性别:
- 来自: 杭州
博客专栏
-
Percolator与分布...
浏览量:5688
文章分类
最新评论
-
heglase:
好牛逼 竟然解决了我别的问题
使用jdk工具tools.jar引发的问题 -
wqcva:
在使用这个类的时候workerId应该怎么传
java时间有序id生成 -
沙漠绿树:
增加虚拟节点解决数据均衡的问题。我有个疑问:1.使用虚拟节点后 ...
一致性hash的实现 -
BucketLi:
wangjian95 写道tddl.....?不是
java唯一ID生成 -
wangjian95:
tddl.....?
java唯一ID生成
一些java排序方法,记录下。
package com.taobao.junyu.fastnet.util; import java.util.Arrays; import java.util.List; public class SortUtil { private static int CUTOFF = 10; /** * Simple insertion sort * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void insertionSort(T[] a) { insertionSort(a, 0, a.length - 1); } /** * Simple bubble sort * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void bubbleSort(T[] a) { for (int i = 0; i < a.length - 1; i++) // the last one is no need for // comparing to itself { for (int j = a.length - 1; j > i; j--) { if (a[j].compareTo(a[j - 1]) < 0) { swapReferences(a, j, j - 1); } } } } /** * Shell sort, using Shell's (poor) increments. * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void shellSort(T[] a) { int j; for (int gap = a.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < a.length; i++) { T tmp = a[i]; for (j = i; j >= gap && tmp.compareTo(a[j - gap]) < 0; j -= gap) { a[j] = a[j - gap]; } a[j] = tmp; } } } /** * Simple selection sort * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void selectionSort(T[] a) { for (int i = 0; i < a.length - 1; i++) { int minIdx = i; for (int j = i + 1; j < a.length; j++) { if (a[j].compareTo(a[minIdx]) < 0) minIdx = j; } if (minIdx != i) { swapReferences(a, i, minIdx); } } } /** * Standard heap sort * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void heapSort(T[] a) { for (int i = a.length / 2; i >= 0; i--) /* buildHeap */ { percDown(a, i, a.length); } for (int i = a.length - 1; i > 0; i--) { swapReferences(a, 0, i); /* deleteMax */ percDown(a, 0, i); } } /** * Merge sort algorithm * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void mergeSort(T[] a) { @SuppressWarnings("unchecked") T[] tmpArray = (T[]) new Comparable[a.length]; mergeSort(a, tmpArray, 0, a.length - 1); } /** * Quick sort algorithm * * @param a * an array of Comparable items */ public static <T extends Comparable<? super T>> void quickSort(T[] a) { quickSort(a, 0, a.length - 1); } /** * Internal method for heap sort that is used in deleteMax an buildHeap * * @param a * an array of Comparable items. * @param i * the position from which to percolate down. * @param n * the logical size of binary heap. */ private static <T extends Comparable<? super T>> void percDown(T[] a, int i, int n) { int child; T tmp; for (tmp = a[i]; leftChild(i) < n; i = child) { child = leftChild(i); if (child != n - 1 && a[child].compareTo(a[child + 1]) < 0) child++; if (tmp.compareTo(a[child]) < 0) a[i] = a[child]; else break; } a[i] = tmp; } /** * Internal method for heap sort. * * @param i * the index of an item in the heap * @return the index of the left heap */ private static int leftChild(int i) { return 2 * i + 1; } /** * Internal method that makes recursive calls. * * @param a * an array of Comparable items. * @param tmpArray * an array to place the merged result. * @param left * the left-most index of the sub-array. * @param right * the right-most index of the sub-array. */ private static <T extends Comparable<? super T>> void mergeSort(T[] a, T[] tmpArray, int left, int right) { if (left < right) { int center = (left + right) / 2; mergeSort(a, tmpArray, left, center); mergeSort(a, tmpArray, center + 1, right); merge(a, tmpArray, left, center + 1, right); } } /** * Internal method that merges two sorted halves of a sub-array * * @param a * an array of Comparable items * @param tmpArray * an array to place the merged result. * @param leftPos * the left-most index of the sub-array. * @param rightPos * the index of the start of the second half. * @param rightEnd * the right-most index of the sub-array. */ private static <T extends Comparable<? super T>> void merge(T[] a, T[] tmpArray, int leftPos, int rightPos, int rightEnd) { int leftEnd = rightPos - 1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; // Main loop while (leftPos <= leftEnd && rightPos <= rightEnd) { if (a[leftPos].compareTo(a[rightPos]) <= 0) { tmpArray[tmpPos++] = a[leftPos++]; } else { tmpArray[tmpPos++] = a[rightPos++]; } } while (leftPos <= leftEnd) // Copy rest of first half tmpArray[tmpPos++] = a[leftPos++]; while (rightPos <= rightEnd) // Copy rest of second half tmpArray[tmpPos++] = a[rightPos++]; // Copy tmpArray back for (int i = 0; i < numElements; i++, rightEnd--) { a[rightEnd] = tmpArray[rightEnd]; } } /** * Internal quick sort method that makes recursive calls. Uses * median-of-three partitioning and a cutoff of 10 * * @param a * an array of Comparable items * @param left * the left-most index of the sub-array. * @param right * the right-most index of the sub-array. */ private static <T extends Comparable<? super T>> void quickSort(T[] a, int left, int right) { if (left + CUTOFF <= right) { T pivot = median3(a, left, right); // Begin partitioning int i = left, j = right - 1; for (;;) { while (a[++i].compareTo(pivot) < 0) { } while (a[--j].compareTo(pivot) > 0) { } if (i < j) { swapReferences(a, i, j); } else { break; } } swapReferences(a, i, right - 1); // Restore pivot quickSort(a, left, i - 1); // Sort small elements quickSort(a, i + 1, right);// Sort large elements } else // Do an insertion sort on the sub-array { insertionSort(a, left, right); } } private static <T extends Comparable<? super T>> T median3(T[] a, int left, int right) { int center = (left + right) / 2; if (a[center].compareTo(a[left]) < 0) swapReferences(a, left, center); if (a[right].compareTo(a[left]) < 0) swapReferences(a, left, right); if (a[right].compareTo(a[center]) < 0) swapReferences(a, center, right); // Place pivot at position right-1 swapReferences(a, center, right - 1); return a[right - 1]; } /** * Internal insertion method * * @param a * an array of Comparable items * @param left * the left-most index of the array * @param right * the right-most index of the array */ private static <T extends Comparable<? super T>> void insertionSort(T[] a, int left, int right) { if (left < right) { int j; for (int p = left + 1; p <= right; p++) { T tmp = a[p]; for (j = p; j > left && tmp.compareTo(a[j - 1]) < 0; j--) a[j] = a[j - 1]; a[j] = tmp; } } } /** * Internal method: Swap the position of two elements of an array by * referencing * * @param a * an array for swapping the element * @param i * the first element's index * @param j * the second element's index * @return the array after swapping */ private static <T> T[] swapReferences(T[] a, int i, int j) { T tmp = a[i]; a[i] = a[j]; a[j] = tmp; return a; } public static void main(String[] args){ Integer[] ori=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s1=System.nanoTime(); SortUtil.bubbleSort(ori); System.out.println("bubleSort:"+(System.nanoTime()-s1)); printArray(Arrays.asList(ori)); Integer[] ori2=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s2=System.nanoTime(); SortUtil.insertionSort(ori2); System.out.println("insertionSort:"+(System.nanoTime()-s2)); printArray(Arrays.asList(ori2)); Integer[] ori3=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s3=System.nanoTime(); SortUtil.mergeSort(ori3); System.out.println("mergeSort:"+(System.nanoTime()-s3)); printArray(Arrays.asList(ori3)); Integer[] ori4=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s4=System.nanoTime(); SortUtil.heapSort(ori4); System.out.println("heapSort:"+(System.nanoTime()-s4)); printArray(Arrays.asList(ori4)); Integer[] ori5=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s5=System.nanoTime(); SortUtil.quickSort(ori5); System.out.println("quickSort:"+(System.nanoTime()-s5)); printArray(Arrays.asList(ori5)); Integer[] ori6=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s6=System.nanoTime(); SortUtil.selectionSort(ori6); System.out.println("selectionSort:"+(System.nanoTime()-s6)); printArray(Arrays.asList(ori6)); Integer[] ori7=new Integer[]{32,1,45,63,76,8,3,6,8,9,2,4,56,788,934,5,4,3}; long s7=System.nanoTime(); SortUtil.shellSort(ori7); System.out.println("shellSort:"+(System.nanoTime()-s7)); printArray(Arrays.asList(ori7)); } @SuppressWarnings("rawtypes") public static void printArray(List array){ StringBuilder sb=new StringBuilder(); for(Object o:array){ sb.append(String.valueOf(o)); sb.append(" "); } System.out.println(sb.toString()); } }
发表评论
-
Spring Validator 部分注解说明
2021-01-30 17:13 353@AssertFalse Boole ... -
Mac 安装 OpenJDK
2019-07-17 08:05 829现在 ORACLE 新版本 JDK 越发越快,新版本固然好,但 ... -
git fork 分支合并原分支
2019-06-27 10:35 11281. List the current configured ... -
Cobar内存快速检测tips
2017-11-07 17:20 427很长时间没有使用mat,技巧生疏,趁这次使用Cobar(htt ... -
ORACLE CDC增量同步初始化
2016-09-07 22:29 760// Step 1 Find the source tab ... -
一些文章
2015-09-04 14:38 0http://www.biaodianfu.com/herme ... -
java资源加载
2015-04-22 10:04 596tips下。 this.getClass().getReso ... -
使用jdk工具tools.jar引发的问题
2015-04-22 09:31 1728这里tips下这个问题 之前本地开发机使用jdk7进行开发和 ... -
eclipse for mac快捷键
2015-02-26 13:16 705Command + O:显示大纲 Command + D:删除 ... -
zookeeper client的一些操作
2014-11-07 12:30 7371.登陆 ./zkcli.sh -server 127.0.0 ... -
java获取类版本和检查重复代码
2014-10-13 21:59 1391public final class Version { ... -
java代码细节
2014-10-17 09:29 847看代码过程中一些细节记录,不断补充。质量可靠,开发高效的捷径在 ... -
java程序启动的一些设置
2014-09-19 11:14 01. 开启debug,suspend值设置成y会等待debug ... -
java_web开发tips
2014-07-21 09:44 01.这两天接手一个新的应用,打算在上面开发几个api,因为功能 ... -
信息安全基础
2014-07-21 09:46 743转自某微博,这边tips下,虽然很不完全,但是有一些思路 信 ... -
Shift-And和Shift-Or ByteBuffer匹配器
2012-09-07 18:15 1520两个ByteBuffer的匹配算法java实现,原作者 庄大侠 ... -
一个简单的BufferPool
2012-08-31 10:15 958一个简单的buffer分配和收集代码,将一大段buffer分片 ... -
一个典型md5生成工具类
2012-08-23 09:27 1156import java.io.UnsupportedEnc ... -
Java程序员常用工具集(转)
2012-08-31 10:18 1031转自庄大侠(killme2008)的博客,我这边收藏下。 原 ... -
spring mvc的参数获取(转)
2014-09-26 11:54 625原文地址:http://www.blogjava.net/wm ...
相关推荐
### Java冒泡排序方法详解 ...通过对给定代码的分析和优化,我们不仅了解了冒泡排序的基本思想,还掌握了一些改进排序性能的方法。希望这些内容能够帮助你在学习或工作中更好地理解和运用冒泡排序算法。
本文将深入探讨Java中的各种排序方法以及它们的改良策略。首先,我们来看看几种基础的排序算法,然后讨论如何通过优化来提高这些算法的性能。 1. **冒泡排序**(Bubble Sort): 冒泡排序是最基础的排序算法之一,...
以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...
Java集合框架中的`List`接口提供了一个`sort(Comparator<? super E> comparator)`方法,可以接受一个比较器(Comparator)来定义自定义的排序规则。默认情况下,Java使用自然排序,即按照字符串的Unicode值进行排序...
当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行排序。本文将深入探讨`Collections.sort()`的使用、原理以及如何自定义排序规则...
此外,我们还将讨论如何在Java中使用面向对象的思想来实现这些排序算法,并允许用户通过终端输入选择所需的方法。 首先,让我们来看看冒泡排序。冒泡排序是一种简单的交换排序方法,它通过重复遍历待排序的序列,...
### Java 实现几种常见排序方法 #### 泡泡排序(Bubble Sort) 泡泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复...
Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **...
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
Java集合框架提供两种主要的排序方式:`Collections.sort()`方法和流API的`sorted()`方法。 - `Collections.sort()`:适用于`List`接口的实现类,如`ArrayList`和`LinkedList`。它直接在原地对列表进行排序,无需...
在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些...在实际应用中,还可以考虑使用Java的内置排序方法`Arrays.sort()`,它使用了一种高效的快速排序变体,但具体实现细节则由JVM实现决定。
直接插入排序是一种简单的排序方法,它的工作原理类似于我们平时手动整理扑克牌。在排序过程中,我们假设前n-1个元素已经排好序,然后将第n个元素插入到已排序的部分,保持排序不变。这个过程不断重复,直到所有元素...
java冒泡排序代码,亲测能用,控制台输入数据,自动排序
Java基础知识: 冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如...
使用java实现的选择、冒泡、插入、快速、希尔排序以及折半查找
根据提供的文件信息,我们可以归纳出以下关于Java排序的相关知识点: ### 一、文件基本信息 - **文件名**:`java排序.txt` - **文件描述**:该文本文件主要介绍了几种常用的Java排序算法,并通过示例代码展示了...
然而,这些类存在一些设计上的问题,因此Java 8引入了新的日期时间API,包括`java.time.LocalDate`, `java.time.LocalDateTime`, 和 `java.time.ZonedDateTime`等。这里我们主要关注`LocalDate`,因为它是没有时区...
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...