无意中看到一个游戏中有着快速排序的源代码,备份下
import java.util.Comparator;
public class QuickSorter<Type> extends Sorter<Type> {
public void sort(Type[] array, int count, Comparator<Type> comparator) {
quicksort(array, 0, count - 1, comparator);
}
// quicksort a[left] to a[right]
public void quicksort(Type[] a, int left, int right, Comparator<Type> comparator) {
if (right <= left) return;
int i = partition(a, left, right, comparator);
quicksort(a, left, i - 1, comparator);
quicksort(a, i + 1, right, comparator);
}
// partition a[left] to a[right], assumes left < right
private int partition(Type[] a, int left, int right, Comparator<Type> comparator) {
int i = left - 1;
int j = right;
while (true) {
while (comparator.compare(a[++i], a[right]) < 0) { // find item on left to swap
} // a[right] acts as sentinel
while (comparator.compare(a[right], a[--j]) < 0) { // find item on right to swap
if (j == left) {
break; // don't go out-of-bounds
}
}
if (i >= j) {
break; // check if pointers cross
}
Type swap = a[i]; // swap two elements into place
a[i] = a[j];
a[j] = swap;
}
Type swap = a[i]; // swap with partition element
a[i] = a[right];
a[right] = swap;
return i;
}
}
分享到:
相关推荐
本次课程设计的目标是使用C语言编写一个快速排序程序,对一组学生的一门课程考试成绩进行排序,并确保输入和输出的格式符合指定要求。快速排序是一种高效的排序算法,其基本思想是通过选取一个"枢轴"元素,将数组...
基于python实现的快速排序程序源码基于python实现的快速排序程序源码基于python实现的快速排序程序源码基于python实现的快速排序程序源码基于python实现的快速排序程序源码基于python实现的快速排序程序源码基于...
快速排序是一种常用的排序算法,它通过选择一个枢轴元素,将数组分成两个部分,然后递归地对这两个部分进行排序。下面我们将详细地介绍快速排序的算法设计与分析。 算法设计 快速排序的算法设计可以分为两个部分:...
为了进一步优化这个快速排序程序,可以考虑以下几点: 1. 基准值的选择:如上所述,可以使用更智能的方法选取基准值,例如“三数取中”或随机选择。 2. 插入排序优化:当子序列大小减小到一定程度时,可以改用插入...
java 编写的快速排序程序递归形式我做的课堂作业,,希望能帮助大家。。。
"qucikSort2.5"这个文件可能是程序的主程序或版本号,表示这是一个快速排序的2.5版图形界面程序。用户可以通过运行这个程序来体验快速排序的全过程,加深对算法的理解。总的来说,这样的工具对于学习和教学快速排序...
快速排序的核心在于一个称为“枢轴元素”(pivot)的选择。通常,我们选择数组中的一个元素作为枢轴,然后将数组分为两部分:一部分的所有元素都小于枢轴,另一部分的所有元素都大于或等于枢轴。这个过程称为“分区...
在本项目中,“快速排序演示程序/vc++/mfc”是一个使用Visual C++和Microsoft Foundation Class (MFC)库编写的程序,目的是通过图形化的方式直观展示快速排序的过程。 MFC是微软提供的一套面向对象的类库,用于简化...
快速排序的核心是选取一个基准元素(pivot),将数组分成两部分,一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后递归地对这两部分继续进行快速排序。这样整个数组最终会被排序。 ### ...
3. **递归排序**:对左右两个子数组分别进行快速排序,直到子数组只剩下一个元素。 4. **组合**:由于快速排序是原地排序,所以不需要像归并排序那样进行额外的合并步骤。 快速排序通常比归并排序更快,因为它通常...
其核心思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都比基准小,另一部分的所有元素都比基准大,然后对这两部分递归进行快速排序。 2. 冒泡排序:是最简单的排序算法之一,通过不断交换相邻位置的...
用c++写的一个快速排序程序的实现,程序简洁,可以直接用在C语言上
快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序在平均情况下的时间复杂度为O(n log n),最坏情况下的时间复杂度为O(n^2)。其主要优点是...
在TIA博途中实现快速排序,我们需要创建两个FC(Function Block)块:一个用于数据交换,另一个用于执行快速排序算法。 1. 数据交换FC块(data_Swap): 这个FC块接收两个输入参数,分别为需要交换的两个元素的...
参照Sartaj Sahni所著的,Algorithms, and Applications in c++>>提供的代码,完成一个在VC++ 2010环境下调试通过的快速排序源程序。 代码非常简洁,十几行, 注释丰富,一看就懂,同时提供随机生成1000个整数为样例...
`SortDemo`可能是一个用于演示快速排序的程序,它可能包含以下功能: 1. **主元选择策略**:不同的主元选择策略会影响排序效率。如“三数取中”法,即选取数组首、尾、中间三个元素的中位数作为主元,可以提高主元...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录...
快 速 排 序 的 c 语 言 程 序
3. **递归排序(Recursion)**:对基准左右两侧的子数组分别进行快速排序,直到子数组只剩下一个元素或为空,排序结束。 快速排序的平均时间复杂度为O(n log n),最坏情况下(已排序或逆序数组)为O(n^2),但这种...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它在很多情况下比其他基本排序算法如冒泡排序、插入排序等有着显著的性能优势,平均时间复杂度为O(n log n),在最坏情况下也能保持O(n^...