`
sd4886656
  • 浏览: 89959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[原]Java 快速排序

 
阅读更多

探讨一下快速排序:

    快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

 

 

快速排序动态图: 

  快速排序动态图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分类 数据结构 最差时间复杂度 最优时间复杂度 平均时间复杂度 最差空间复杂度 最佳算法
使用快速排序法对一列数字进行排序的过程
排序算法
Varies
Θ(n2)
Θ(nlogn)
Θ(nlogn) comparisons
根据实现的方式不同而不同
有时是

 

首先构造了基本的数据结果如下,这两个算作工具吧,一个是用于标记尚未排序区间的Pointer,另一个是基本栈结构。

 

/* 栈元素,用于记录尚未排序的区间*/
class Pointer
{
	int start,end;
	public Pointer(int x,int y)
	{
		this.start = x;
		this.end = y;
	}
}
/* 栈,用于存放Pointer的静态数组,不可动态自增维度*/
 class Stack
{
	 private final static int MAX =20;
	 private  static Pointer [] container; 
	 static int place = -1;
	 public Stack()
	 {
		 container = new Pointer[MAX];
	 }
	
	public   void Push(Pointer element)
	{
		if(place>=-1 && place<MAX-1)
		container[++place] = element;
	}
	
	public boolean isEmpty()
	{
		if(place ==-1)
			return true;
		else
			return false;
	}
	
	public Pointer Pop()
	{
		if(place == -1 || place>=20)
			return null;
		else
		{
			
			return container[place --];
		}
	}
}
算法如下:
public class QuickSort 
{
	
	public static void main(String [] arg)
	{
		int [] src ={83 ,19 ,3 ,62 ,27 ,56 ,9 ,24 ,60 ,88 };
			
                //BubbleSort.createRandom(10, 0, 100);
		
		stack  = new Stack();
		stack.Push(new Pointer(0,src.length -1));


		while(!stack.isEmpty())
		{//递归开始
			Pointer p = (Pointer)stack.Pop();
			int index = sortOnce(src,p.start,p.end);

			if(index - p.start >=1)
				stack.Push(new Pointer(p.start,index-1));
			if(p.end - index-1 >=1)
				stack.Push(new Pointer(index+1,p.end));
		}
		System.out.println("\nend:");
		for(int elements : src)
		{
			System.out.print(elements+" ");
			
		}
		System.out.println("");
	}
	
	static Stack stack ;

	
	public static int sortOnce(int [] quene, int start , int end)
	{
		//当quene是整个的时候,start = 0 , end = quene.length -1 
		
                int pivot;//基准
		pivot = quene[start];
		
		int i = start,j=end;
		while(i<j)
		{
			
			while(quene[j] > pivot && i<j)
				j--;
			if(i<j)
			quene[i++] = quene[j];

			while(quene[i] < pivot && i<j)
				i++;
			if(i<j)
			quene[j--] = quene[i];
			
		}
		
		quene[i] = pivot;
		
		for( int element:quene)
		{
			System.out.print(element+ " ");
		}
		System.out.println(" index="+i);
		
		return i;
	}
	

}
结果:
60 19 3 62 27 56 9 24 83 88  index=8
24 19 3 9 27 56 60 62 83 88  index=6
9 19 3 24 27 56 60 62 83 88  index=3
9 19 3 24 27 56 60 62 83 88  index=4
3 9 19 24 27 56 60 62 83 88  index=1
3 9 19 24 27 56 60 62 83 88  index=0

end:
3 9 19 24 27 56 60 62 83 88  
分享到:
评论

相关推荐

    简单的快速排序

    在Java中实现快速排序,我们需要定义一个方法来执行这个过程。下面是一个简化的快速排序算法的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if ...

    基于JAVA的快速排序.pdf

    基于JAVA的快速排序 快速排序是计算机科学中的一种重要算法,能够高效地对数据进行排序。本文将详细介绍基于JAVA的快速排序算法,包括其基本思想、实现方法和优点。 1. 快速排序的基本思想 快速排序是C.R A ....

    java中的快速排序

    在Java中,我们可以使用递归实现快速排序。以下是对标题和描述中所述知识点的详细说明: 1. **分治法**: 分治法是解决问题的一种策略,它将一个大问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题...

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

    根据给定的文件信息,我们将深入探讨两种经典的排序算法——快速排序和归并排序,并结合Java语言实现进行详细解析。 ### 快速排序算法 快速排序是一种高效的排序算法,采用分而治之的策略,其核心思想是选择一个...

    算法实验(java快速排序。归并排序,分治算法,回溯算法,n后问题) C语言

    本实验包涵盖了五种重要的算法,包括Java实现的快速排序、归并排序,以及分治算法、回溯算法和N皇后问题的C语言解决方案。下面将对这些算法进行详细介绍。 1. **快速排序**:快速排序是一种高效的排序算法,由C.A.R...

    使用Java与Python实现十大排序算法之快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的主要思想是分治策略,通过选取一个基准值,将待排序的数据分为两个子序列,一个包含所有小于基准值的元素,另一个包含所有大于基准...

    Java实现八大排序算法

    在这里,我们将深入探讨Java实现的八大排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序以及计数排序。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,...

    基于Java的多线程快速排序设计与优化.pdf

    单线程快速排序在运行时,与选择的划分基准紧密相关,如果能够将原序列平均分为两个子序列,那么递归的次数会显著减少,从而提升排序效率。单线程快速排序的伪代码展示了排序的基本逻辑:当序列范围大于一个临界值时...

    算法设计中分而治之快速排序

    在压缩包中的“新建文件夹 (2)”可能包含了相关的源代码文件,这些文件可能包含了快速排序的C、C++、Java或Python等语言的实现。通过对这些代码的学习和实践,你可以加深对快速排序算法的理解,并提高编程技能。

    JAVA经典算法各种排序算法

    快速排序法(二) 快速排序法(三) 合併排序法 基數排序法 搜尋 循序搜尋法(使用衛兵) 二分搜尋法(搜尋原則的代表) 插補搜尋法 費氏搜尋法 矩陣 稀疏矩陣 多維矩陣轉一維矩陣 上三角、下三角、...

    Java经典算法教程:快速排序-代码非常清晰小白也能看懂

    **Java实现快速排序的代码分析:** 在给定的Java代码示例中,主要包含以下几个关键方法: 1. **`quickSort` 方法**:这是快速排序的核心递归函数。它接收一个数组 `arr`、一个低索引 `low` 和一个高索引 `high` ...

    快速排序举例

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

    Java实现几种常见排序方法

    快速排序是一种高效的排序算法,采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。具体步骤如下: 1. 选择一个基准值。 2. 将所有比基准值小的元素放到基准前面,所有比基准值大的...

    分治法应用(二分查找归并排序快速排序比赛日程安排)

    在Java中,快速排序的实现往往涉及到交换元素和递归调用。 4. **比赛日程安排**:虽然这个主题通常不直接与传统的分治法关联,但我们可以将其视为一个优化问题,利用类似贪心算法或动态规划的方法来解决。例如,...

    箱子排序BInSort图形界面演示(JAVA)

    3. 对每个非空箱子内的元素进行排序,可以使用其他排序算法,如插入排序、快速排序等。 4. 顺序遍历所有的箱子,将每个箱子中的元素依次添加回原数组,这样就得到了有序的序列。 这个项目对于学习数据结构的学生来...

    算法课程设计——分治法(java实现)

    在本课程设计中,我们将使用 Java 语言对快速排序算法进行实现,并对算法的性能进行分析和比较。 快速排序算法的优点包括: * 高效的排序速度:快速排序算法的时间复杂度为 O(n log n),它是一种高效的排序算法,...

    java 将二维数组顺时针,逆时针排序

    - 首先,我们可以将二维数组的元素转换成一维数组,然后使用标准的排序算法(如快速排序、归并排序)对一维数组进行排序。 - 排序完成后,根据原二维数组的行数和列数,再将一维数组重新构造回二维数组,此时元素...

    最简单易懂的java数组排序方法整理

    本文将为大家介绍最简单易懂的Java数组排序方法,总结了四种常见的排序方法:快速排序法、冒泡排序法、选择排序法和插入排序法。 快速排序法 快速排序法是Java中最简单和最常用的排序方法之一。它使用了Java的...

    java递归的排序和查找

    1. **快速排序**:快速排序是一种高效的排序算法,它基于“分而治之”的策略。在Java中,递归用于将大数组分为较小的部分,然后对这些部分进行排序。关键在于选择一个“基准”元素,将数组分为小于和大于基准的两...

Global site tag (gtag.js) - Google Analytics