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

java面试——快速排序

阅读更多

基本思想

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

算法过程  

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:

1)设置两个变量I、J,排序开始的时候:I=1,J=N;

2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0];

3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换;

4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换;

5)重复第3、4步,直到 I=J;

 

例如:待排序的数组A的值分别是:(初始关键数据:X=3)

A[0] 、 A[1]、 A[2]、 A[3]、 A[4]

3            1         5         4          2      

根据(3)从右往左找,找到第一个小于X的值为2(2<3) 进行与X的交换,

进行第一次交换后: 2 1 5 4 3 ,此时J=3

根据(4)从左往右找,找到第一个大于X的值为5(5>3) 进行与X的交换,

进行第二次交换后:2 1 3 4 5 , 此时I=2

再执行第三步的时候就发现I=J,从而结束一躺快速排序,那么经过一趟快速排序之后的结果是:

2 1 3 4 5,即所以大于3的数全部在3的右边,所以小于3的数全部在3的左边。

快速排序就是递归调用此过程——在以3为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列。

初始状态 {3 1 5 4 2}

进行一次快速排序之后划分为 {2 1} 3{4 5}

分别对前后两部分进行快速排序 {2 1} 经第三步和第四步交换后变成 {1 2} 完成排序。

{4 5} 经第三步和第四步交换后变成 {4 5} 完成排序。

JAVA算法 

 /** 
 * 工程:sort
 * 包名:com.xyq.demo
 * 文件:QuitSort .java
 * 作者:xiatiaohcx 
 * 时间:Apr 1, 2009  10:31:30 AM 
 */
package com.xyq.demo;

/**
 * @author xiatiaohcx
 * 
 * 作用:快速排序
 */
public class QuitSort {
	public static void main(String[] args) {
		int[] nums = { 3,1,5,4,2 };
		quickSort(nums, 0, nums.length - 1);
		for (int i = 0; i < nums.length; ++i) {
			System.out.print(nums[i] + ",");
		}
		System.out.println("");
	}

	public static void quickSort(int[] a, int low, int hight) {
		int left = low;
		int right = hight;

		if (left >= right)
			return;

		boolean flag = true;

		while (left != right) {
			if (a[left] > a[right]) {
				int temp = a[left];
				a[left] = a[right];
				a[right] = temp;
				flag = (flag == true) ? false : true;
			}

			if (flag)
				right--;
			else
				left++;

		}

		left--;
		right++;
		quickSort(a, low, left);
		quickSort(a, right, hight);
	}
}

  呵呵,这篇文章是我的第一个开篇,写的有点垃圾,大部分都是从baidu上搜出来的,不过是自己整理的,javaeye让标 明是否原创,郁闷,支持自己一个,写个原吧

分享到:
评论
2 楼 1927105 2010-11-30  
为什么没有选key啊??
1 楼 1927105 2010-11-30  
谢谢啊,,,,,写的不错

相关推荐

    java面试——深圳-银盛支付-Java中级.zip

    这份"java面试——深圳-银盛支付-Java中级.zip"压缩包文件很可能包含了针对Java中级开发者的一系列面试问题和解答,旨在帮助求职者提升自己的技能,并在面试中脱颖而出。下面,我们将深入探讨一些可能涵盖的Java中级...

    java面试——深圳-中国平安-Java中级.zip

    下面将根据"java面试——深圳-中国平安-Java中级.pdf"这份资料,提炼出一些核心的Java知识点。 1. **Java基础**: - **数据类型**:包括基本数据类型和引用数据类型,理解它们的区别和内存管理。 - **类与对象**...

    java面试——杭州-阿里云-Java中级.zip

    这个压缩包文件“java面试——杭州-阿里云-Java中级.zip”包含了一份详细的PDF文档,它可能涵盖了面试中常遇到的问题、技术要点以及解决策略。以下是基于Java中级工程师面试的一些关键知识点: 1. **基础语法**:...

    java面试——上海-拼多多-Java高级.zip

    这份压缩包文件"java面试——上海-拼多多-Java高级.zip"包含了针对Java高级开发人员的面试问题和解答,帮助应聘者准备面试。以下是根据标题、描述和标签提炼出的一些核心Java知识点,这些内容通常会在拼多多的面试中...

    java面试——广州-唯品会-Java大数据开发工程师.zip

    - **排序与搜索**:快速排序、归并排序、二分查找等常见算法的实现与性能分析。 - **图论与树结构**:深度优先搜索、广度优先搜索,最小生成树,最短路径问题,以及二叉树遍历等。 - **动态规划**:理解和应用...

    java面试——Redis面试专题.zip

    在Java面试中,对Redis的理解与应用能力是考察候选人技术广度和深度的重要环节。下面将详细探讨Redis的核心特性、常用命令、数据类型、持久化机制、主从复制、Sentinel哨兵系统以及Cluster集群等内容。 1. **Redis...

    高级JAVA面试——最全的总结

    - 排序算法:冒泡、选择、插入、快速、归并等排序的实现与比较。 - 查找算法:二分查找、哈希查找等。 - 树结构:二叉树、平衡树(AVL、红黑树)的操作。 - 链表:单链表、双链表、环形链表的操作。 9. **JVM**...

    JAVA面试宝典—程序员面试32问和JAVA面试题

    14. **算法与数据结构**:虽然不是Java语言本身的内容,但面试中常常会涉及到,例如排序算法(冒泡、插入、选择、快速、归并等)、查找算法、树结构(二叉树、AVL树、红黑树等)和图算法。 15. **Java新特性**:...

    Java程序员面试宝典,Java面试必备PDF文件

    12. **算法与数据结构**:虽然Java面试不一定直接考算法,但良好的算法基础是必不可少的,如排序(冒泡、插入、选择、快速、归并)、查找(二分查找)、递归、图论等。 通过学习和理解这些知识点,Java程序员不仅...

    android面试——面霸经历(增加java基础)

    - **快速排序**: 选择一个基准元素,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。 **3. 数据结构** - **...

    Java面试特别包

    这个"Java面试特别包"包含两本重要的学习资料——"java面试宝典2011"和"java面试经典125题",以及可能的面试实录,旨在帮助求职者充分准备,提升面试通过率。 "java面试宝典2011"可能涵盖了当年Java技术的热点和...

    java面试2022面试宝典和简历模板

    Java面试是每位求职者在寻求Java相关职位时必须经历的重要环节。随着技术的快速发展,面试题目和要求也在不断更新。2022年的面试宝典和简历模板为求职者提供了全面的准备指南,帮助他们更好地展示自己的技能和经验。...

    Java面试题大全 高清 目录 标签

    10. **算法与数据结构**:虽然Java面试更偏重于实际应用,但基础的算法和数据结构知识依然重要,例如排序算法(冒泡、选择、插入、快速、归并)、查找算法(二分查找、哈希查找)、链表、树、栈、队列、图等。...

    java面试汇总--提高成功率的宝典

    Java面试汇总——提升面试成功率的关键知识点 在Java面试中,掌握关键知识点是成功的关键。以下是一些常见的面试问题和解答,这些内容可以帮助你更好地准备Java面试。 1. 面向对象的特征: - 抽象:允许我们定义...

    【Java面试题汇总】——超全,建议多次学习,经常复习,常看常新!.rar

    12. **算法与数据结构**:虽然Java面试中算法的比重可能不如某些编程语言高,但基本的排序算法(冒泡、选择、插入、快速、归并等)、查找算法、图论、树结构等仍然非常重要。 13. **编程规范**:良好的编码习惯,...

    JAVA面试 葵花宝典and九阴真经

    "JAVA面试——葵花宝典and九阴真经"这个压缩包显然提供了这样一份宝贵的资源,旨在帮助新手程序员更好地准备面试,提升求职成功率。 葵花宝典通常象征着绝世秘籍,这里可能包含了Java面试中必备的基础知识点和技巧...

    数据结构与问题求解——java语言描述 源码

    例如,`Sort.java`可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。每种排序算法都有其特定的时间复杂性和适用场景,通过阅读源码可以加深对它们的理解。 此外,...

    java面试资料集合面试资料

    在Java面试中,掌握核心概念和技术是至关重要的。"java面试资料集合面试资料"这个标题表明这是一份针对Java求职者的面试准备资源。标签"java 求职面试"进一步强调了这些材料专注于Java编程语言及其在面试环境中的...

    程序员面试宝典——经典

    2. **算法与数据结构**:链表、数组、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图、排序(快速排序、归并排序、冒泡排序等)和查找算法(二分查找、哈希查找)是面试中的常见考点。理解其原理、复杂度分析以及...

Global site tag (gtag.js) - Google Analytics