优化了一些细节,速度比上一个快排快10%/*** @author CLY* 快速排序*/publicclass MyQuickSort {/*** 对待排数组排序(升序)* @param arr 待排数组* @param pivot 枢轴在待排数组中的起始位置(排序起始位)* @param end 本次快排的结束位(排序结束位)*/publicstaticvoid sort(int[] arr,int pivot,int end) {int tmp_pivot = pivot;int tmp_end = end;//为true时pivot在数组左边,为false时在右边boolean flag = true;//整个过...
1publicclass QuickRank {2publicstaticvoid main(String[] args) {3int[] original={26,58,1,24,75,69,32,45,841,25898};4 QuickRank quickRank=new QuickRank();5 quickRank.rankSimple(original,0,original.length-1);6for(int i:original)7 System.out.println(i);8}9//清晰明了10publicvoid rankSimple(int[] original,int start,int end){
11if(end<=start) return;//递归结束条件12int standard=original[st...
JDK1.7 java.uti.Arrays开始使用DualPivotQuicksort作为默认排序方法详细讲解链接:http://www.tuicool.com/articles/BfY7Nz算法思想:选出两个枢轴P1和P2,需要3个指针L,K,G。3个指针的作用如下图: 算法为以下的步骤:(数组大小小于286时,使用DualPivotQuicksort)1、 小于47的数组,使用插入排序。2、选择枢轴P1和P2。(假设使用数组头和尾)。3、P1需要小于P2,否者交换。现在数组被分成4份,left到L的小于P1的数,L到K的大于P...
1package com.array;2 3publicclass Sort_Quick {4/* 5 * 项目名称:快速排序 ; 6 * 项目要求:用JAVA对数组进行排序,并运用快速排序算法; 7 * 作者:Sevck;8*/ 9publicvoid sort(int left, int right, int array[]) {
10int l = left;
11int r = right;
12int pirot = array[(left + right) / 2];
13int temp = 0;
14while (l < r) {
15while (array[l] < pirot && l >= left)
16 l++;
17while (arr...
<pre name="code" class="java">package com.test.linked;public class QuickSort {public class Array{private int[] Myarray;private int size;public Array(int max){Myarray=new int[max];size=0;}/*** 插入数据* @param value*/public void insert(int value){Myarray[size]=value;size++;}/*** 排序*/public void sort(){reQuickSort(0,size-1);}/*** 排序,利用递归将数组分为更小的两个数组* @param left* @param right*/p...
为什么要有双路快速排序?当要排序的数组有大量的重复的话,如果只是单路的话,大量的重复值会在两个分割数组中其中的一个,这样在极端情况下退化成O(n^2)级别,对排序性能有较大的影响。当要排序的数组存在大量的重复值的时候,我们可以采取双路法进行快速排序。即两个指针移动,一端比分界值小就继续移动,一端比分界值大就继续移动,出现不满足彼此条件的情况就交换,这样相等的值就会比较均匀分布在数组的两端。 具体java代...
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现方式一: 1package test1;2 3publicclass QuicSort {4/* 5 * 使用快速排序6 * arras:要排序的数组7 * low:数组的开始下标8 * hig...
public class QuickSort { public static void quickSort(int[] arr, int left, int right){ int temp; int i = left; int j = right; if (left < right){ // temp存放基准数("枢轴") temp = arr[left]; while (i != j){ // 先从右扫描,只要比temp大j就向左移,直到找到一个比"枢轴"temp小的数 while (i < j && arr[j]>temp){ ...
快速排序是冒泡排序的优化,是一种非常高效的排序, 甚至是目前为止最高效的排序,其思想是这样的:设数组a中存放了n个数据元素,low为数组的低端下标,high为数组的高端下标,从数组a中任取一个元素(通常取a[low])做为标准元素,以该标准元素调整数组a中其他各个元素的位置,使排在标准元素前面的元素均小于标准元素,排在标准元素后面的均大于或等于标准元素,由此将数组根据标准元素分解成了两个子数组。对这两个子数组中的元...
一、核心思想将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。综上可知:归并排序其实要做两件事:(1)“分解”——将序列每次折半划分。(2)“合并”——将划分后的序列段两两合并后排序。 我们先来考虑第二步,如何合并?在每次合并过程中,都是对两个有序的序...
public class HelloJava{ public static void main(String[] args) { int[] arr1 = new int[] {45,40,90,30,80,70,50}; System.out.println("排序前: "); for(int i=0; i<arr1.length; i++) { System.out.print(arr1[i]+" "); } System.out.println(); System.out.println("快速排序后:"); quickSort(arr1, 0, arr1.length-1); int[] arr2 = new int[] {11,52,4,5,65,4,2,1,45}; System.out.println("排序前: "...
快速排序是一种在大多数情况下比冒泡排序效率更高(详情参考有关算法复杂度的文章)的算法。注意:许多编程语言内置的排序 API 底层实现便是基于快速排序。ES5 与 ES6 语法在实现该算法时区别不大,以下仅提供 ES5 版本。function quickSort(arr) {var len = arr.length;if (len <= 1) {return arr.slice(0); // 注意用 slice 可防范 arr[0] 为 undefined }var left = [], right = [], mid = [];mid.push(arr[0]);for (var i = 1; ...
冒泡排序:http://blog.csdn.net/pzhtpf/article/details/7560294 1publicclass bubbleSort { 2public bubbleSort(){ 3int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; 4int temp=0; 5for(int i=0;i<a.length-1;i++){ 6for(int j=0;j<a.length-1-i;j++){ 7if(a[j]>a[j+1]){ 8 temp=a[j]; 9 a[j]=a[j+1];
10 a[j+1]=temp;
11 ...
据说一般的笔试或面试都会考考排序,今天就试着想自己实现一把,看了原理后,发现没那么容易,又去网上找了下,发现评论都说作者的代码有问题。这更激起了我的兴趣。遂坚持编写出来并进行了测试,应该没有问题,如有问题 希望留言评论快速排序的理论和算法的评价就不粘贴了,网上一查一大堆,在这只写代码 1publicclass QuickSort {2 @Test3publicvoid sort(){4int[] a = { 5, 8, 6, 2, 7, 9, 1, 7, 3 };5//int[] a = {3, 1, 2,...
首先要介绍一下冒泡排序,冒泡排序的过程很简单,首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个关键字交换,然后比较第二个和第三个,直到最后一个比较完成。这是第一趟冒泡,其结果使得关键字最大的记录被安置到最后一个位置上了。然后对序列前n-1个元素进行第二次冒泡,将倒数第二个选出。以此类推直到所有被选出,冒泡结束。 通过分析可以得出,冒泡排序的时间复杂度为O(n2)。 ...