`
daojin
  • 浏览: 697854 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

快速排序的高效率实现方法

 
阅读更多
/**
 * 
 */
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--;
		}
	}
}

 

分享到:
评论

相关推荐

    快速排序算法和冒泡排序效率对比

    在效率方面,由于冒泡排序的时间复杂度较高,当处理大数据量时,快速排序的优势就显现出来了。实验证明,快速排序在大多数情况下都能显著优于冒泡排序,这也是为什么在实际编程中更倾向于使用快速排序的原因。然而,...

    TIA博途中通过SCL语言实现快速排序的具体方法示例.docx

    快速排序的主要优点是平均时间复杂度为O(n log n),在大多数情况下效率较高。但最坏情况下的时间复杂度为O(n^2),这通常发生在数组已经完全有序或接近有序时。不过,这种情况在实际应用中不常见。此外,由于快速排序...

    合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现

    本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    在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库来...

    排序算法编程 堆排序 快速排序

    本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...

    快速排序的递归简洁实现

    快速排序因其高效率和简洁性成为许多应用程序的首选排序算法。通过递归地划分和排序子序列,它能够有效地处理大规模数据集。然而,快速排序的性能高度依赖于基准元素的选择,实际应用中通常会采用随机选择基准或三数...

    快速排序C++的实现

    6. **优缺点**:讨论快速排序的优缺点,如效率高、不稳定、对输入敏感等。 7. **应用实例**:列举快速排序在实际问题中的应用。 以上就是快速排序的基本知识,以及在C++中实现快速排序的步骤。在Microsoft Visual ...

    数据结构--快速排序算法的实现

    快速排序的优点在于其平均性能优秀,但在最坏的情况下(例如输入数据已经完全有序),快速排序的时间复杂度退化为O(n^2),这时可以采取优化策略,如随机选择枢轴、三数取中等方法来避免最坏情况的发生。 此外,快速...

    快速排序算法C语言实现

    由于快速排序的效率高且原地排序,因此在许多场合下都是首选的排序算法。 在`quickSort.c`文件中,可能包含了这个算法的具体实现,包括对数组的处理、递归调用以及可能的优化,如随机选择枢轴来避免最坏情况等。...

    快速排序算法c++实现

    在C++中实现快速排序,首先我们需要定义一个函数作为划分操作的核心,通常被称为`partition`。这个函数会选择一个元素作为“基准”(pivot),并将数组分为两部分:小于基准的元素在基准之前,大于或等于基准的元素...

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...

    7大排序算法实现程序(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)

    本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...

    C#使用sort方法对数组进行快速排序

    本篇文章将深入探讨如何使用`Sort`方法对数组进行快速排序以及其背后的实现原理。 首先,让我们了解快速排序的基本概念。快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的主要思想...

    快速排序、堆排序、归并排序、希尔排序实现

    C++中实现快速排序的关键是选取合适的基准值和分区操作。 **堆排序(Heap Sort)** 堆排序是一种基于比较的内部排序方法,它利用了完全二叉树的特性。堆可以看作是一个近似最大或最小元素的优先队列。在C++中,可以...

    直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码

    在实际应用中,应根据数据特性选择合适的排序算法,例如,快速排序和二路归并排序在大多数情况下效率较高,而冒泡排序和直接插入排序则适用于小规模数据或部分有序数据。在学习这些算法时,不仅要关注代码实现,更要...

    快速排序算法以及归并算法

    在实际应用中,快速排序通常具有较高的平均性能,但归并排序由于其稳定性和在某些情况下的更优性能,也有其独特的优势。 通过上述代码示例,我们不仅了解了这两种算法的基本原理,还掌握了如何使用Java语言来实现...

    快速排序.pdf

    代码首先定义了一个名为QuickSort的公共类,其中包含一个静态方法quick()用于实现快速排序,同时包含一个main方法用于测试快速排序。在quick()方法中,通过定义左右边界指针left和right以及基准值x,使用while循环和...

    快速排序的非递归实现

    总的来说,非递归快速排序是一种利用栈来实现的高效排序方法,它通过模拟递归过程,避免了递归调用的开销,适用于处理大规模数据。理解并熟练掌握这种算法,对于提升编程能力尤其是算法设计与分析能力非常有帮助。

    快速排序的并行算法

    具体操作是选择一个元素作为基准(pivot),然后通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程...

Global site tag (gtag.js) - Google Analytics