`

快速排序1

 
阅读更多
package com.pskfire.example;

// quickSort1.java
// demonstrates simple version of quick sort
// to run this program: C>java QuickSort1App
////////////////////////////////////////////////////////////////
class ArrayIns {
	private long[] theArray; // ref to array theArray
	private int nElems; // number of data items

	// --------------------------------------------------------------

	public ArrayIns(int max) // constructor
	{
		theArray = new long[max]; // create the array
		nElems = 0; // no items yet
	}

	// --------------------------------------------------------------
	public void insert(long value) // put element into array
	{
		theArray[nElems] = value; // insert it
		nElems++; // increment size
	}

	// --------------------------------------------------------------
	public void display() // displays array contents
	{
		System.out.print("A=");
		for (int j = 0; j < nElems; j++)
			// for each element,
			System.out.print(theArray[j] + " "); // display it
		System.out.println("");
	}

	// --------------------------------------------------------------
	public void quickSort() {
		recQuickSort(0, nElems - 1);
	}

	// --------------------------------------------------------------
	public void recQuickSort(int left, int right) {
		if (right - left <= 0) // if size <= 1,
			return; // already sorted
		else // size is 2 or larger
		{
			long pivot = theArray[right]; // rightmost item
											// partition range
			int partition = partitionIt(left, right, pivot);
			recQuickSort(left, partition - 1); // sort left side
			recQuickSort(partition + 1, right); // sort right side
		}
	} // end recQuickSort()
		// --------------------------------------------------------------

	public int partitionIt(int left, int right, long pivot) {
		int leftPtr = left - 1; // left (after ++)
		int rightPtr = right; // right-1 (after --)
		while (true) { // find bigger item
			while (theArray[++leftPtr] < pivot)
				; // (nop)
					// find smaller item
			while (rightPtr > 0 && theArray[--rightPtr] > pivot)
				; // (nop)

			if (leftPtr >= rightPtr) // if pointers cross,
				break; // partition done
			else
				// not crossed, so
				swap(leftPtr, rightPtr); // swap elements
		} // end while(true)
		swap(leftPtr, right); // restore pivot
		return leftPtr; // return pivot location
	} // end partitionIt()
		// --------------------------------------------------------------

	public void swap(int dex1, int dex2) // swap two elements
	{
		long temp = theArray[dex1]; // A into temp
		theArray[dex1] = theArray[dex2]; // B into A
		theArray[dex2] = temp; // temp into B
	} // end swap(
		// --------------------------------------------------------------
} // end class ArrayIns
// //////////////////////////////////////////////////////////////

class QuickSort1App {
	public static void main(String[] args) {
		int maxSize = 16; // array size
		ArrayIns arr;
		arr = new ArrayIns(maxSize); // create array

		for (int j = 0; j < maxSize; j++) // fill array with
		{ // random numbers
			long n = (int) (java.lang.Math.random() * 99);
			arr.insert(n);
		}
		arr.display(); // display items
		arr.quickSort(); // quicksort them
		arr.display(); // display them again
	} // end main()
} // end class QuickSort1App
// //////////////////////////////////////////////////////////////
分享到:
评论

相关推荐

    快速排序的三种写法及随机化快速排序

    文件名列表中的"快速排序1.txt"至"快速排序3.txt"可能包含了这三种快速排序方法的实现代码或详细解释。在学习这些文件时,你可以关注如何选择主元、如何进行分区操作以及如何进行递归调用等关键步骤。通过理解和实践...

    快速排序 快速排序快速排序快速排序

    快速排序快速排序 快速排序 快速排序 快速排序 快速排序

    用C语言写的快速排序1.c

    void quicksort(int a[], int p, int r) { if(p){ int q = partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } }

    5. 快速排序里的学问:霍尔与快速排序1

    快速排序是一种高效的排序算法,由英国计算机科学家查尔斯·安东尼·理查德·霍尔(Sir Charles Antony Richard Hoare)在1960年发明。霍尔因其对计算机科学的贡献,尤其是快速排序算法,而被广泛认可。快速排序的...

    JavaScript快速排序1

    1. **快速排序的基本步骤**: - **选择基准值**:通常选取数组中的一个元素,如中间值。 - **分区**:遍历数组,将小于基准的元素放到基准的左边,大于基准的元素放到基准的右边。这个过程中可以使用交换操作来...

    快速排序 快速排序例子

    ### 快速排序知识点解析 #### 一、快速排序简介 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。它采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地...

    C语言实现多种链表快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录...

    简单的快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),即把一个大问题分解成若干个小问题来解决,最终将小问题的结果合并得到原问题的解。在这...

    确定性快速排序与随机化快速排序的比较

    快速排序是一种高效的排序算法,在计算机科学和数学中被广泛研究。其基本原理是分治法策略,即将一组数据分为两个子序列并分别进行排序。快速排序期望的时间复杂度为O(nlogn),但在最坏的情况下,它的时间复杂度可...

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

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

    快速排序算法(c#实现)

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治策略,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再...

    快速排序 --- 非递归实现

    1. 定义快速排序的主函数,接受一个数组和它的长度作为参数。 2. 初始化一个栈,将整个数组的范围(0至数组长度-1)压入栈中。 3. 进行一个循环,直到栈为空。 4. 在循环内,弹出栈顶元素,即当前处理的子数组范围。...

    快速排序算法相关分析

    实际上,随机化快速排序得到理论最坏情况的可能性仅为 1/(2^n)。所以随机化快速排序可以对于绝大多数输入数据达到 O(nlogn)的期望时间复杂度。 用栈模拟递归的快速排序是另一种优化版本。快速排序的实现需要消耗...

    快速排序源码 快速排序源码

    快速排序源码 快速排序源码快速排序源码 快速排序源码快速排序源码 快速排序源码快速排序源码 快速排序源码快速排序源码 快速排序源码

    快速排序算法的java实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...

    冒泡排序和快速排序的时间性能

    冒泡排序和快速排序的时间性能 冒泡排序和快速排序是两种常用的排序算法,它们的时间性能是开发者和研究人员所关心的热点话题。在本文中,我们将对冒泡排序和快速排序的时间性能进行深入分析和比较。 冒泡排序是一...

    快速排序PPT课件.pptx

    快速排序是一种基于比较的排序算法,它的基本思想是选择一个中心元素,将小于中心点的元素移动至中心点之前,大于中心点的元素移动至中心点之后,然后对上步分成的两个无序数组段重复这个过程直到段长为1。...

    随机快速排序 算法设计与分析实验报告

    (1)用随机快速排序的方法,对输入的数值以从大到小的顺序进行快速排序。 (2)对随机快速排序和冒泡排序这两种排序方法进行比较,测试其在不同数值大小的情况下算法运行的时间复杂度。 二、 实验要求 快速排序...

    算法实验1-快速排序

    在给出的"Lab 1"文件中,可能包含了实现快速排序的代码,包括普通快速排序和随机快速排序的版本,以及统计两种排序算法运行时间的代码。通过分析和运行这些代码,你可以更深入地理解快速排序的工作原理和性能特性。

Global site tag (gtag.js) - Google Analytics