/**
*
*/
package com.me.shuai;
/**
* @author Administrator
*
*/
public class testing {
/**
*
*/
public testing() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
int[] testingValue = { 10, 2,2,13, 3, 4, 5, 8, 6, 7, 23,10, 20, 15, 50, 51 };
quickSort(testingValue, 0, testingValue.length - 1);
}
static void printCurrentStatus(int[] arr) {
System.out.println("begin");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println("the end");
}
static void quickSort(int[] arr, int low, int high) {
if (low > high)
return;
int result = 0;
result = Partition2(arr, low, high);
printCurrentStatus(arr);
quickSort(arr, low, result - 1);
quickSort(arr, result + 1, high);
}
static int Partition2(int[] arr, int low, int high) {
int piviot = arr[low];
while(low < high){
while(low < high && arr[high] >= piviot){ high--;}
{
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
while(low < high && arr[low] <= piviot){ low++;}
{
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}
return low;
}
static int Partition3(int[] arr, int low, int high) {
int piviot = arr[low];
while(low < high){
while(low < high && arr[high] >= piviot){ high--;}
{
arr[low] = arr[high];
}
while(low < high && arr[low] <= piviot){ low++;}
{
arr[low] = arr[high];
}
}
arr[low] = piviot;
return low;
}
static int Partition(int[] arr, int low, int high) {
int sartPiviotIndex = low;
int piviot = arr[sartPiviotIndex];
while (true) {
for (; low <= high; --high) {
if (arr[high] <= piviot) {
break;
}
}
if (low > high) {
arr[sartPiviotIndex] = arr[low - 1];
arr[low - 1] = piviot;
return low - 1;
}
for (; low <= high; ++low) {
if (arr[low] > piviot) {
break;
}
}
if (low > high) {
arr[sartPiviotIndex] = arr[low - 1];
arr[low - 1] = piviot;
return low - 1;
}
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
if (low == high - 1) {
arr[sartPiviotIndex] = arr[low];
arr[low] = piviot;
return low;
}
low++;
high--;
}
}
}
分享到:
相关推荐
在效率方面,由于冒泡排序的时间复杂度较高,当处理大数据量时,快速排序的优势就显现出来了。实验证明,快速排序在大多数情况下都能显著优于冒泡排序,这也是为什么在实际编程中更倾向于使用快速排序的原因。然而,...
快速排序的主要优点是平均时间复杂度为O(n log n),在大多数情况下效率较高。但最坏情况下的时间复杂度为O(n^2),这通常发生在数组已经完全有序或接近有序时。不过,这种情况在实际应用中不常见。此外,由于快速排序...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
在Java中,快速排序可以这样实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { int pivotIndex = partition(arr, low, high); quickSort...
通过随机选择基准,随机化快速排序算法能够在各种输入数据分布下都保持较高的效率。 在进行快速排序与随机化快速排序的运行速度实验时,可以通过编写代码来记录不同数据规模下的排序时间。使用Python中的time库来...
本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...
快速排序因其高效率和简洁性成为许多应用程序的首选排序算法。通过递归地划分和排序子序列,它能够有效地处理大规模数据集。然而,快速排序的性能高度依赖于基准元素的选择,实际应用中通常会采用随机选择基准或三数...
6. **优缺点**:讨论快速排序的优缺点,如效率高、不稳定、对输入敏感等。 7. **应用实例**:列举快速排序在实际问题中的应用。 以上就是快速排序的基本知识,以及在C++中实现快速排序的步骤。在Microsoft Visual ...
快速排序的优点在于其平均性能优秀,但在最坏的情况下(例如输入数据已经完全有序),快速排序的时间复杂度退化为O(n^2),这时可以采取优化策略,如随机选择枢轴、三数取中等方法来避免最坏情况的发生。 此外,快速...
由于快速排序的效率高且原地排序,因此在许多场合下都是首选的排序算法。 在`quickSort.c`文件中,可能包含了这个算法的具体实现,包括对数组的处理、递归调用以及可能的优化,如随机选择枢轴来避免最坏情况等。...
在C++中实现快速排序,首先我们需要定义一个函数作为划分操作的核心,通常被称为`partition`。这个函数会选择一个元素作为“基准”(pivot),并将数组分为两部分:小于基准的元素在基准之前,大于或等于基准的元素...
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
本篇文章将深入探讨如何使用`Sort`方法对数组进行快速排序以及其背后的实现原理。 首先,让我们了解快速排序的基本概念。快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的主要思想...
C++中实现快速排序的关键是选取合适的基准值和分区操作。 **堆排序(Heap Sort)** 堆排序是一种基于比较的内部排序方法,它利用了完全二叉树的特性。堆可以看作是一个近似最大或最小元素的优先队列。在C++中,可以...
在实际应用中,应根据数据特性选择合适的排序算法,例如,快速排序和二路归并排序在大多数情况下效率较高,而冒泡排序和直接插入排序则适用于小规模数据或部分有序数据。在学习这些算法时,不仅要关注代码实现,更要...
在实际应用中,快速排序通常具有较高的平均性能,但归并排序由于其稳定性和在某些情况下的更优性能,也有其独特的优势。 通过上述代码示例,我们不仅了解了这两种算法的基本原理,还掌握了如何使用Java语言来实现...
代码首先定义了一个名为QuickSort的公共类,其中包含一个静态方法quick()用于实现快速排序,同时包含一个main方法用于测试快速排序。在quick()方法中,通过定义左右边界指针left和right以及基准值x,使用while循环和...
总的来说,非递归快速排序是一种利用栈来实现的高效排序方法,它通过模拟递归过程,避免了递归调用的开销,适用于处理大规模数据。理解并熟练掌握这种算法,对于提升编程能力尤其是算法设计与分析能力非常有帮助。
具体操作是选择一个元素作为基准(pivot),然后通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程...