- 浏览: 203469 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
NIghtmare28:
太好用了, 谢谢
Create Local Cloudera Parcels Repo to Save Your ASS -
oyxccyj:
你好,请问下你如上的问题解决了吗?我现在也遇到同样的问题,网上 ...
Homework - HBase Shell, Java Client and MapReduce Job -
20131007:
用java描述算法?
基础数据结构和算法二:Selection sort -
ender35:
第二种实现仅能用于数组排序
计数排序(Counting Sort) -
fy616508150:
我想知道有括号参加运算怎么办
算24算法实现
这个算法实现中,对小的子数组使用插入排序,借此来提高性能。
Knuth推荐对小数组的切割点为9,正是程序中使用的值。实践中还需要根据测试请看选择更好的切割点。
import java.util.Random; public class QuickSort2 { private long[] theArr; private int nElems; public QuickSort2(int max) { this.theArr = new long[max]; this.nElems = 0; } public void insert(long value) { this.theArr[nElems++] = value; } public void display() { System.out.print("A="); for (int i = 0; i < nElems; i++) { System.out.print(theArr[i] + " "); } System.out.println(); } public void quickSort() { this.recQuickSort(0, nElems - 1); } public void recQuickSort(int left, int right) { int size = right - left + 1; if (size <= 9) { // insert sort or sth. else. insertSort(left, right); } else { // quick sort long median = medianOf3(left, right); int partition = partitionIt(left, right, median); recQuickSort(left, partition - 1); recQuickSort(partition + 1, right); } } public void insertSort(int left, int right) { int in, out; for (out = left + 1; out <= right; out++) { long temp = theArr[out]; in = out; while (in > left && theArr[in - 1] > temp) { theArr[in] = theArr[in - 1]; --in; } theArr[in] = temp; } } /** * 因为使用了取头尾和中间点的中值作为枢纽点,并且在median3方法中 * 已经对三个值进行了正确的排序,左右指针都不会越界,所以这里去除了对leftPtr < right * 和rightPtr > left的检测,稍微提高了性能。 * */ public int partitionIt(int left, int right, long pivot) { int leftPtr = left; int rightPtr = right - 1; while (true) { while (theArr[++leftPtr] < pivot) { // } while (theArr[--rightPtr] > pivot) { // } if (leftPtr >= rightPtr) { break; } else { swap(leftPtr, rightPtr); } } swap(leftPtr, right - 1); return leftPtr; } /** * 取三中值法,分别取头尾和中间的点, * 分别取得正确位置以后,再将中值放到最后一个位置进行快速排序。 */ public long medianOf3(int left, int right) { int center = (left + right) / 2; if (theArr[left] > theArr[center]) { swap(left, center); } if (theArr[left] > theArr[right]) { swap(left, right); } if (theArr[center] > theArr[right]) { swap(center, right); } swap(center, right - 1); return theArr[right - 1]; } public void swap(int dex1, int dex2) { long temp = theArr[dex1]; theArr[dex1] = theArr[dex2]; theArr[dex2] = temp; } public static void main(String... args) { if (args.length < 1) { System.out.println("usage: java QuickSort2 number"); return; } QuickSort2 qs = new QuickSort2(100); int count = Integer.parseInt(args[0]); Random rand = new Random(); for (int i = 0; i < count; i++) { qs.insert(rand.nextInt(count * count)); } qs.display(); qs.quickSort(); qs.display(); } }
选取三中值是为了防止在极端情况下,比如每次选取的中值是所有数据中最大或者最小的情况,快速排序性能急剧下降。
发表评论
-
基础数据结构和算法十四:Directed Graphs
2013-12-15 22:40 1814In directed graphs, edges a ... -
基础数据结构和算法十三:Undirected Graphs (2)
2013-12-13 22:51 1069Design pattern for graph p ... -
基础数据结构和算法十三:Undirected Graphs
2013-12-13 20:15 1210A graph is a set of vertices ... -
基础数据结构和算法十二:Hash table
2013-12-02 22:06 1059Search algorithms that use ... -
基础数据结构和算法十一:Red-black binary search tree
2013-12-01 12:12 1524The insertion algorithm fo ... -
基础数据结构和算法十:2-3 search tree
2013-11-30 11:07 1225Binary search tree works w ... -
基础数据结构和算法九:Binary Search Tree
2013-11-28 22:39 1682A binary search tree (BST) ... -
基础数据结构和算法八:Binary search
2013-11-28 21:21 1158Binary search needs an ordere ... -
基础数据结构和算法七:Priority queue & Heap sort
2013-11-27 19:47 2721Some important applications o ... -
基础算法七: Priority queue & Heap sort
2013-11-26 21:46 0Some important applications ... -
基础数据结构和算法六:Quick sort
2013-11-21 19:33 1247Quick sort is probably used m ... -
Inversions of an array
2013-11-20 22:28 0TODO -
基础数据结构和算法五:Merge sort
2013-11-20 21:44 2000One of mergesort’s most at ... -
基础数据结构和算法四:Shell sort
2013-11-20 19:11 1195Shellsort is a simple exte ... -
Comparing two sorting algorithms
2013-11-19 21:16 871Generally we compare algorith ... -
基础数据结构和算法三:Insertion Sort
2013-11-19 21:06 1012As in selection sort, the ite ... -
基础数据结构和算法二:Selection sort
2013-11-19 20:57 1185One of the simplest sortin ... -
基础数据结构和算法一:UnionFind
2013-11-19 20:47 1288The problem that we consid ... -
Three-sum with linear time complexity
2013-09-14 10:08 0TODO package org.george.algor ... -
Blooming Filter in Hadoop
2013-07-27 22:49 0TODO
相关推荐
在C语言中实现链表快速排序,首先需要理解链表和快速排序的基本概念。链表不同于数组,它不连续存储数据,而是通过指针连接各个节点。每个节点包含数据元素和指向下一个节点的指针。快速排序的核心是“分区操作”和...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....总的来说,这个压缩包提供了一个非递归实现快速排序的完整示例,通过自定义栈的数据结构,实现了快速排序算法,适用于理解和学习快速排序的非递归实现方式。
快速排序的平均时间复杂度为O(n log n),在最坏的情况下(输入数组已经完全有序或逆序),时间复杂度为O(n^2)。然而这种情况在实际应用中很少出现,因为快速排序通常能在实际数据集上表现出优秀的性能。同时,由于...
快速排序是实际运用中用的最多的算法,虽然它在最坏的情况下会达到n^2,但它的平均性能非常好,期望时间复杂度为nlgn,而且隐含的常数因子非常小,并且是原址排序。 快速排序原理:从一组数中任意选出一个数,将...
根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...
### 快速排序的递归简洁实现 #### 分区函数(Partition) 分区是快速排序的核心步骤,其主要目标是选择一个基准元素(pivot),并将所有小于等于该基准的元素移动到基准的左边,所有大于该基准的元素移动到基准的...
C++是面向对象的编程语言,它提供了丰富的库支持和高效的语言特性,非常适合实现各种算法,包括快速排序。在C++中实现快速排序,通常需要以下步骤: 1. **选择基准元素**:可以随机选取数组中的一个元素作为基准,...
最坏情况下快速排序的时间复杂度为O(n^2)。 * 最好时间复杂度:最好情况是指每次区间划分的结果都是基准关键字的左右两边长度相等或者相差为1,即选择的基准关键字为待排序的记录的中间值。此时进行比较次数总共为...
标题:C语言快速排序算法实现 描述:本文将深入探讨如何使用C语言实现快速排序算法,这是一种高效的排序方法,广泛应用于各种数据结构处理场景。快速排序的基本思想是通过一趟排序将待排记录分隔成独立的两部分,...
快速排序的时间复杂度在最坏情况下为O(n²),但平均情况下为O(n log n),且其内部循环可以在大部分硬件上很高效地实现,因此快速排序通常是实际应用中最常用的排序算法之一。空间复杂度为O(log n),这是由于递归调用...
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...
快速排序 java实现
以下是一个简单的C++模板类实现快速排序的示例: ```cpp template void quickSort(T arr[], int left, int right) { if (left ) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivot...
在Java中,快速排序可以这样实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { int pivotIndex = partition(arr, low, high); quickSort...
这是一个用C语言实现的快速排序的程序,它实现了对一个英文文本中的单词排序并将排序结果输出到另外一个文件中。
快速排序算法C语言实现,快排序算法QuickSort.cpp
用MPI实现的快速排序,提高快速排序的效率
6. **边界处理**:在实际的MIPS快速排序实现中,还需要考虑数组为空或只包含一个元素的情况,这些情况不需要排序,可以直接返回。 7. **优化**:为了提高效率,可以考虑使用尾递归优化,或者在划分过程中减少不必要...
快速排序期望的时间复杂度为O(nlogn),但在最坏的情况下,它的时间复杂度可上升至O(n^2),例如当每次选择的分界线位于序列的边界时。为了避免这种情况,提出了随机化快速排序的概念。 随机化快速排序在选择基准元素...