快速排序实例
代码如下:
import org.rut.util.algorithm.SortUtil;
public class QuickSort implements SortUtil.Sort{
public void sort(int[] data) {
quickSort(data,0,data.length-1);
}
private void quickSort(int[] data,int i,int j){
int pivotIndex=(i+j)/2;
//swap
SortUtil.swap(data,pivotIndex,j);
int k=partition(data,i-1,j,data[j]);
SortUtil.swap(data,k,j);
if((k-i)>1) quickSort(data,i,k-1);
if((j-k)>1) quickSort(data,k+1,j);
}
private int partition(int[] data, int l, int r,int pivot) {
do{
while(data[++l]<pivot);
while((r!=0)&&data[--r]>pivot);
SortUtil.swap(data,l,r);
}
while(l<r);
SortUtil.swap(data,l,r);
return l;
}
}
改进后的快速排序:
import org.rut.util.algorithm.SortUtil;
public class ImprovedQuickSort implements SortUtil.Sort {
private static int MAX_STACK_SIZE=4096;
private static int THRESHOLD=10;
public void sort(int[] data) {
int[] stack=new int[MAX_STACK_SIZE];
int top=-1;
int pivot;
int pivotIndex,l,r;
stack[++top]=0;
stack[++top]=data.length-1;
while(top>0){
int j=stack[top--];
int i=stack[top--];
pivotIndex=(i+j)/2;
pivot=data[pivotIndex];
SortUtil.swap(data,pivotIndex,j);
l=i-1;
r=j;
do{
while(data[++l]<pivot);
while((r!=0)&&(data[--r]>pivot));
SortUtil.swap(data,l,r);
}
while(l<r);
SortUtil.swap(data,l,r);
SortUtil.swap(data,l,j);
if((l-i)>THRESHOLD){
stack[++top]=i;
stack[++top]=l-1;
}
if((j-l)>THRESHOLD){
stack[++top]=l+1;
stack[++top]=j;
}
}
insertSort(data);
}
private void insertSort(int[] data) {
int temp;
for(int i=1;i<data.length;i++){
for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
SortUtil.swap(data,j,j-1);
}
}
}
}
分享到:
相关推荐
本文实例讲述了PHP快速排序算法。分享给大家供大家参考,具体如下: 快速排序:在无序的数组$data中,选择任意一个值作为对比值,定义i为头部检索索引,j为尾部检索索引, 算法步骤: (1)初始化对比值$value=$data...
c语言10个数据结构设计实例二叉树建立遍历冒泡排序快速排序等提取方式是百度网盘分享地址
本文实例讲述了Python快速排序算法。分享给大家供大家参考,具体如下: 快速排序的时间复杂度是O(NlogN) 算法描述: ① 先从序列中取出一个数作为基准数 ② 分区过程, 将比这个数大的数全部放到它的右边, 小于或等于...
本文实例讲述了Python实现的插入排序,冒泡排序,快速排序,选择排序算法。分享给大家供大家参考,具体如下: #!/usr/bin/python # coding:utf-8 #直接插入排序 def insert_sort(list): for i in range(len(list))...
本文实例讲述了PHP排序算法之快速排序(Quick Sort)及其优化算法。分享给大家供大家参考,具体如下: 基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进。他的基本思想是:通过一趟排序将待排记录分割成独立的...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的核心思想是分治策略,即将一个大问题分解为若干个小问题来解决。在快速排序中,我们选择一个基准值(pivot),然后将数组分为两...
本文实例讲述了PHP快速排序quicksort。分享给大家供大家参考,具体如下: quicksort 在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。(即一分为二的...
2. **快速排序**:快速排序是一种高效的排序算法,基于分治策略。`quick_sort` 函数首先选择一个基准元素,然后将数组分为小于基准和大于基准的两部分,分别对这两部分递归地进行快速排序。最后,将排序好的两部分...
本文实例对比了javascript与Python快速排序实现方法。分享给大家供大家参考。具体如下: js实现方法: function quicksort(arr) { if (arr.length <= 1) return arr return quicksort(arr.filter(function ...
本文实例讲述了Python实现快速排序的方法。分享给大家供大家参考,具体如下: 说起快排的Python实现,首先谈一下,快速排序的思路: 1、取一个参考值放到列表中间,初次排序后,让左侧的值都比他小,右侧的值,都比...
本文实例讲述了Go语言实现冒泡排序、选择排序、快速排序及插入排序的方法。分享给大家供大家参考。具体分析如下: 算法是程序的灵魂,而排序算法则是一种最基本的算法。排序算法有许多种,这里介绍4中排序算法:冒泡...
这些实例可能是数据结构的实现(如链表、树、堆、图等)、排序算法(如快速排序、归并排序)、搜索算法(如二分搜索)、动态规划、贪心算法、图算法等。 在学习算法时,理解和实现这些经典实例是提高算法能力的基础...
本文实例讲述了C#快速排序算法。分享给大家供大家参考。具体实现方法如下: public static int[] QuickSort(int[] arr) { if (arr.Length <= 1) return arr; int pivot = arr.Length - 1; int[] less = ...
其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何...
**Protues实例:数据排序** Protues是一款强大的虚拟原型设计工具,特别适合电子工程师和学生在电路设计和仿真中使用。这个"Data Sorting"实例展示了如何利用Protues平台进行数字逻辑设计,特别是涉及到数据处理和...
分页存储过程实例分享 分页存储过程是数据库中一个常用的技术,能够帮助我们快速获取指定的数据记录,并且可以根据需要进行排序和过滤。下面是对该存储过程的详细解释: 存储过程参数 该存储过程共有7个参数: 1...
本文实例讲述了C#使用委托实现的快速排序算法。分享给大家供大家参考。具体如下: class QuickSort { private delegate int CmpOp(object Left, object Right); private void swap(object[] Array, int Left, int...
其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何...
- **应用框架**:PowerBuilder提供预定义的应用框架,帮助开发者快速构建应用程序的结构和流程。 - **PBL(PowerBuilder Library)库**:存储对象、窗口、菜单等组件的地方,方便复用和版本控制。 2. 学生成绩...
本学习实例是针对华表插件的初学者设计的,旨在帮助用户快速掌握华表的基本操作和功能。通过实例化的教学方式,让学习过程变得简单易懂。"CellOrder (Asp.net+C#+XML)" 这个文件名暗示了我们将涉及到Asp.NET、C#编程...