基本思想
快速排序对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
算法过程
设要排序的数组是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让标 明是否原创,郁闷,支持自己一个,写个原吧
分享到:
相关推荐
这份"java面试——深圳-银盛支付-Java中级.zip"压缩包文件很可能包含了针对Java中级开发者的一系列面试问题和解答,旨在帮助求职者提升自己的技能,并在面试中脱颖而出。下面,我们将深入探讨一些可能涵盖的Java中级...
下面将根据"java面试——深圳-中国平安-Java中级.pdf"这份资料,提炼出一些核心的Java知识点。 1. **Java基础**: - **数据类型**:包括基本数据类型和引用数据类型,理解它们的区别和内存管理。 - **类与对象**...
这个压缩包文件“java面试——杭州-阿里云-Java中级.zip”包含了一份详细的PDF文档,它可能涵盖了面试中常遇到的问题、技术要点以及解决策略。以下是基于Java中级工程师面试的一些关键知识点: 1. **基础语法**:...
这份压缩包文件"java面试——上海-拼多多-Java高级.zip"包含了针对Java高级开发人员的面试问题和解答,帮助应聘者准备面试。以下是根据标题、描述和标签提炼出的一些核心Java知识点,这些内容通常会在拼多多的面试中...
- **排序与搜索**:快速排序、归并排序、二分查找等常见算法的实现与性能分析。 - **图论与树结构**:深度优先搜索、广度优先搜索,最小生成树,最短路径问题,以及二叉树遍历等。 - **动态规划**:理解和应用...
在Java面试中,对Redis的理解与应用能力是考察候选人技术广度和深度的重要环节。下面将详细探讨Redis的核心特性、常用命令、数据类型、持久化机制、主从复制、Sentinel哨兵系统以及Cluster集群等内容。 1. **Redis...
- 排序算法:冒泡、选择、插入、快速、归并等排序的实现与比较。 - 查找算法:二分查找、哈希查找等。 - 树结构:二叉树、平衡树(AVL、红黑树)的操作。 - 链表:单链表、双链表、环形链表的操作。 9. **JVM**...
14. **算法与数据结构**:虽然不是Java语言本身的内容,但面试中常常会涉及到,例如排序算法(冒泡、插入、选择、快速、归并等)、查找算法、树结构(二叉树、AVL树、红黑树等)和图算法。 15. **Java新特性**:...
12. **算法与数据结构**:虽然Java面试不一定直接考算法,但良好的算法基础是必不可少的,如排序(冒泡、插入、选择、快速、归并)、查找(二分查找)、递归、图论等。 通过学习和理解这些知识点,Java程序员不仅...
- **快速排序**: 选择一个基准元素,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。 **3. 数据结构** - **...
这个"Java面试特别包"包含两本重要的学习资料——"java面试宝典2011"和"java面试经典125题",以及可能的面试实录,旨在帮助求职者充分准备,提升面试通过率。 "java面试宝典2011"可能涵盖了当年Java技术的热点和...
Java面试是每位求职者在寻求Java相关职位时必须经历的重要环节。随着技术的快速发展,面试题目和要求也在不断更新。2022年的面试宝典和简历模板为求职者提供了全面的准备指南,帮助他们更好地展示自己的技能和经验。...
10. **算法与数据结构**:虽然Java面试更偏重于实际应用,但基础的算法和数据结构知识依然重要,例如排序算法(冒泡、选择、插入、快速、归并)、查找算法(二分查找、哈希查找)、链表、树、栈、队列、图等。...
Java面试汇总——提升面试成功率的关键知识点 在Java面试中,掌握关键知识点是成功的关键。以下是一些常见的面试问题和解答,这些内容可以帮助你更好地准备Java面试。 1. 面向对象的特征: - 抽象:允许我们定义...
12. **算法与数据结构**:虽然Java面试中算法的比重可能不如某些编程语言高,但基本的排序算法(冒泡、选择、插入、快速、归并等)、查找算法、图论、树结构等仍然非常重要。 13. **编程规范**:良好的编码习惯,...
"JAVA面试——葵花宝典and九阴真经"这个压缩包显然提供了这样一份宝贵的资源,旨在帮助新手程序员更好地准备面试,提升求职成功率。 葵花宝典通常象征着绝世秘籍,这里可能包含了Java面试中必备的基础知识点和技巧...
例如,`Sort.java`可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。每种排序算法都有其特定的时间复杂性和适用场景,通过阅读源码可以加深对它们的理解。 此外,...
在Java面试中,掌握核心概念和技术是至关重要的。"java面试资料集合面试资料"这个标题表明这是一份针对Java求职者的面试准备资源。标签"java 求职面试"进一步强调了这些材料专注于Java编程语言及其在面试环境中的...
2. **算法与数据结构**:链表、数组、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图、排序(快速排序、归并排序、冒泡排序等)和查找算法(二分查找、哈希查找)是面试中的常见考点。理解其原理、复杂度分析以及...