`
xuelianbobo
  • 浏览: 174723 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java快速排序

阅读更多
/***
 * 快速排序简单实现
 * 
 * @author bobo
 * 
 */
public class QuickSort {
	public static void main(String[] args) {
		/**
		 * 快速排序的逻辑是:在所有元素中取一个标尺(一般是第一个)将待排序序列分成两组 一组的元素 都小于这个标尺,另一组都大于或等于这个标尺
		 * 然后对每个部分再进行递归调用,直到全部完成
		 */
		int[] a = { 9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9};
		show(a);
		quickSort(a, 0, a.length - 1);
		show(a);
	}

	/***
	 * 快速排序的核心方法
	 * 
	 * @param a
	 *            待排序的序列
	 * @param begin
	 *            待排序列子序列起始位置索引
	 * @param end
	 *            待排序列子序列结束位置索引
	 */
	private static void quickSort(int[] a, int begin, int end) {
		System.out.println(begin + ">" + end);
		// 若没有必要进行排序则返回
		if (end - begin <= 1) {
			return;
		}
		// 定义此次排序的标尺元素 此处选择开始位置为标尺元素 不要些a[0] 因为要多次递归调用
		int x = a[begin];
		// 定义左右的指针
		int p1 = begin;// 左指针
		int p2 = end;// 右指针
		// 定义比较方向 true表示向右 false表示向左
		boolean dr = true;
		// 进行循环操作,条件是两个指针不相撞
		L1: while (p1 < p2) {
			// 如果方向向右
			if (dr) {
				// 从p2>p1之间进行循环查找可以进行替换的数值
				for (int i = p2; i > p1; i--) {
					if (a[i] <= x) {
						a[p1] = a[i];
						p1++;// 进行自增 左指针右移
						dr = !dr;// 转换方向
						p2 = i;// 右指针指向i
						continue L1; // 下一步循环
					}
				}
				// 如果能执行到这一步 说明没有找到小于标尺的元素,则说明序列本身就ok 则进行如下赋值
				p2 = p1;
			} else {
				// 如果方向向左
				// 从p1>p2之间进行循环查找可以进行替换的数值
				for (int i = p1; i < p2; i++) {
					if (a[i] > x) {
						a[p2] = a[i];
						p2--;// 右指针自减
						dr = !dr;// 转换方向
						p1 = i;
						continue L1;
					}
					// 如果能执行到这一步 说明没有找到小于标尺的元素,则说明序列本身就ok 则进行如下赋值
					p1 = p2;
				}
			}

		}
		// 进行递归调用
		a[p1] = x;// 填充空白处
		show(a, begin, end,p1);
		quickSort(a, begin, p1 - 1);
		quickSort(a, p1 + 1, end);

	}

	private static void show(int[] a, int begin, int end, int p1) {
		for (int i = begin; i < end + 1; i++) {
			if (i==p1) {
				System.out.print("["+a[i]+"]" + " ");
			}else {
				System.out.print(a[i]+" ");
			}
			
		}
		System.out.println();
	}

	/**
	 * 显示 数组元素
	 * 
	 * @param a
	 */
	private static void show(int[] a) {
		for (int i : a) {
			System.out.print(i + " ");
		}
		System.out.println();
	}
}

 

 

分享到:
评论

相关推荐

    java快速排序算法实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....这个压缩包中的"java快速排序算法"可能包含了更多关于快速排序的示例代码、详细解析和实践练习,可以帮助初学者更好地理解和掌握这种高效的排序算法。

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

    总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...

    Java 快速排序

    以下是一个简单的Java快速排序算法的实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { // 找到基准元素的正确位置 int pivotIndex = ...

    java 快速排序程序

    java 编写的快速排序程序递归形式我做的课堂作业,,希望能帮助大家。。。

    Java 快速排序算法

    Java 快速排序,目前来说效率很高的一种排序算法,好理解。

    java快速排序动画jar

    之前做的四种排序动画,快排比较快,所以为快排专门做一个动画

    java 快速排序 折半查找的界面实现

    总的来说,"java 快速排序 折半查找的界面实现"项目旨在通过可视化的方式帮助学习者理解和掌握这两种经典的算法。通过实际的代码实现和交互式的界面,不仅能够锻炼编程技能,还能加深对算法本质的理解,对于提升编程...

    JAVA快速排序法.pdf

    JAVA快速排序法 JAVA快速排序法是一种高效的排序算法,属于选择排序的一种。它的主要思想是通过选择一个基准元素,将数组分成两个部分:一部分比基准元素小,一部分比基准元素大,然后递归地对这两个部分进行排序。...

    快速排序 java代码

    java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码 java 快速排序实现。可以跑的代码

    [原]Java 快速排序

    以上就是Java快速排序的基本原理和源码分析。快速排序的平均时间复杂度为O(n log n),在最坏情况下(已经排序或逆序)时间复杂度为O(n^2)。由于其高效的性能和相对简单的实现,快速排序在实际应用中被广泛使用。

    java快速排序算法和案例

    java快速排序算法和案例

    快速排序算法的java实现

    在Java中实现快速排序,我们通常会定义一个`quickSort()`方法,该方法接受一个整数数组作为参数。快速排序的核心在于选择一个基准元素(pivot),并重新排列数组使得所有小于基准的元素都在其前,所有大于基准的元素...

    java实现快速排序

    在Java中实现快速排序,我们可以遵循以下步骤: 1. **选择基准值(Pivot)**:首先,我们需要从数组中选取一个元素作为基准,这个元素将被用来分割数组。通常选择第一个或最后一个元素,但也可以是随机选取的。 2....

    java快速排序法

    清楚明确的代码书写,让你轻易学懂快速排序法

    简单的快速排序

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

    java快速排序工具类

    使用泛型的对象排序工具类(使用算法:快速排序),适合初学者学习快速排序的基本原理和实现。

    基础编程:Java快速排序实例详解

    基础编程:Java快速排序实例详解

    快速排序算法java代码

    "快速排序算法java代码" 快速排序算法是由Tony Hoare在1960年提出的一种排序算法,它的平均时间复杂度为O(n log n),是目前最快的排序算法之一。下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的...

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

    包括所有算法分析设计的实验(java快速排序。归并排序,分治算法,回溯算法,n后问题)

    java快速排序、随机优化快排

    java快速排序,和随机优化快排 注解详细,多个版本可选,最简洁版、最高效率版、随机优化版...

Global site tag (gtag.js) - Google Analytics