- 浏览: 1217545 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (706)
- 全部博客(10000) (0)
- java基础 (123)
- 算法及数据结构 (64)
- SSH框架整合与平台系统分析 (11)
- j2ee (46)
- Oracle (95)
- SQL Server (11)
- javaScript (73)
- Ajax (22)
- jQuery (39)
- ExtJs (4)
- jsp (13)
- Servlet (6)
- struts1 (2)
- struts2 (33)
- Ibatis (2)
- hibernate (24)
- Spring (11)
- 设计模式 (8)
- 正则表达式 (9)
- UML (0)
- XML (9)
- linux (19)
- CSS (11)
- FreeMarker (4)
- nginx 与 memcached (6)
- SEO (5)
- Web 服务器 (11)
- junit 与 selenium2 (4)
- MyEclipse 有关的问题 (24)
- 生活杂感 (37)
- 看过的书 (2)
- 技术牛人 (2)
- 需要优化的例子 (3)
- English 学习 (7)
- bug修改的解决方法 (2)
- 数据库实战经验总结 (1)
- 期待解决的问题 (20)
- 等待自己学习的东西 (15)
- 自己公司代码结构总结 (15)
- 企业经营之道 (23)
- 工具管理 (1)
- 世范水晶 (2)
最新评论
-
hustkeai:
第一个方法是不对的
求一个Map中最大的value值,同时列出键,值 -
qq591920734:
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
qq591920734:
[color=orange][/color]包女包女不女
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
timer_yin:
seagrave 写道这个算法想法不错,但太耗时,我用1、2、 ...
用1、2、2、3、4、5这六个数字,数字排序经典算法 -
hellostory:
日常生活中,我们都不按你上面的那个方法算的!!!
JAVA小函数-计算日期差
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n)。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一趟快速排序的算法是:
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)、重复第3、4步,直到I=J;
例如:待排序的数组A的值分别是:(初始关键数据X:=49)
A[1] A[2] A[3] A[4] A[5] A[6] A[7]:
49 38 65 97 76 13 27
进行第一次交换后: 27 38 65 97 76 13 49
( 按照算法的第三步从后面开始找)
进行第二次交换后: 27 38 49 97 76 13 65
( 按照算法的第四步从前面开始找>X的值,65>49,两者交换,此时I:=3 )
进行第三次交换后: 27 38 13 97 76 49 65
( 按照算法的第五步将又一次执行算法的第三步从后开始找)
进行第四次交换后: 27 38 13 49 76 97 65
( 按照算法的第四步从前面开始找大于X的值,97>49,两者交换,此时J:=4 )
此时再执行第三步的时候就发现I=J,从而结束一躺快速排序,那么经过一躺快速排序之后的结果是:27 38 13 49 76 97 65,即所以大于49的数全部在49的后面,所以小于49的数全部在49的前面。
快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列,根据这种思想对于上述数组A的快速排序的全过程如图6所示:
初始状态 {49 38 65 97 76 13 27}
进行一次快速排序之后划分为 {27 38 13} 49 {76 97 65}
分别对前后两部分进行快速排序 {13} 27 {38}
结束 结束 {49 65} 76 {97}
49 {65} 结束
结束
图6 快速排序全过程
1)、设有N(假设N=10)个数,存放在S数组中;
2)、在S[1。。N]中任取一个元素作为比较基准,例如取T=S[1],起目的就是在定出T应在排序结果中的位置K,这个K的位置在:S[1。。K-1]<=S[K]<=S[K+1..N],即在S[K]以前的数都小于S[K],在S[K]以后的数都大于S[K];
3)、利用分治思想(即大化小的策略)可进一步对S[1。。K-1]和S[K+1。。N]两组数据再进行快速排序直到分组对象只有一个数据为止。
如具体数据如下,那么第一躺快速排序的过程是:
数组下标: 1 2 3 4 5 6 7 8 9 10
45 36 18 53 72 30 48 93 15 36
I J
(1) 36 36 18 53 72 30 48 93 15 45
(2) 36 36 18 45 72 30 48 93 15 53
(3) 36 36 18 15 72 30 48 93 45 53
(4) 36 36 18 15 45 30 48 93 72 53
(5) 36 36 18 15 30 45 48 93 72 53
通过一躺排序将45放到应该放的位置K,这里K=6,那么再对S[1。。5]和S[6。。10]分别进行快速排序。
/**
* 交换指定数组a的两个变量的值
* @param a 数组应用
* @param i 数组下标
* @param j 数组下标
*/
public static void swap(int a[], int i, int j) {
if(i == j) return;
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
/**
*
* @param array 待排序数组
* @param low 数组下标下界
* @param high 数组下标上界
* @return pivot
*/
public static int partition(int array[], int low, int high) {
//当前位置为第一个元素所在位置
int p_pos = low;
//采用第一个元素为轴
int pivot = array[p_pos];
for (int i = low + 1; i <= high; i++) {
if (array[i] < pivot) {
p_pos++;
swap(array, p_pos, i);
}
}
swap(array, low, p_pos);
return p_pos;
}
/**
* 快速排序实现
* @param array
* @param low
* @param high
*/
public static void quickSort(int array[], int low, int high) {
if (low < high) {
int pivot = partition(array, low, high);
quickSort(array, low, pivot - 1);
quickSort(array, pivot + 1, high);
}
}
发表评论
-
查找 字符串中 重复字符最多的个数
2013-09-03 12:13 1420public static void main(String[ ... -
JAVA中 RETURN与break有何区别
2013-07-08 11:05 1004想看一个例子: public class G { ... -
一位map,二位map变成字符串后,再变成map的解析过程
2011-12-20 09:38 2732public class G { public s ... -
生成必须有大写小写和数字的随机字符串
2011-11-21 22:56 1341public class Teee { public stat ... -
For_循环练习
2011-10-11 10:47 1384【程序2】 题目:判断10 ... -
彩票 31 选 7
2011-09-07 16:16 1010方法一、用集合实现( ... -
java 循环总结
2011-09-07 10:30 9801、for(){} 比较常用的for循环是 for(i ... -
break 和 continue的用法
2011-08-30 16:41 1520break的作用是跳出这个循环(如果这个break或者cont ... -
Collections 类的方法总结
2011-07-11 17:16 1264public class TestCollect { publ ... -
Collections 类的总结
2011-07-11 17:10 9151、有52张扑克牌要随机发牌给四个玩家,并且四个玩家牌的数量是 ... -
有52张扑克牌要随机发牌给四个玩家,并且四个玩家牌的数量是相同的?
2011-07-11 17:08 2010public class TestList { public ... -
关于Arrays.asList的问题
2011-07-10 16:04 1284将数组转成List问题,通常我们习惯这样写成:List ... -
Arrays方法的总结
2011-07-10 03:03 971public class TArrays { public ... -
Arrays集合总结
2011-07-09 20:37 903Arrays.binarySearch();的用法 A ... -
Arrays.binarySearch();的用法。
2011-07-09 20:34 32977Arrays.binarySearch();的用法。 pub ... -
Comparable<T> 和Comparator 的用法区别?
2011-07-07 00:05 1493答:1、Comparable<T>是一个借口里面只 ... -
TreeSet集合总结
2011-07-06 01:57 873TreeSet 集合中 的comparator()和desce ... -
TreeSet 集合中 的comparator()和descendingIterator()方法的应用对比
2011-07-06 01:53 1515TreeSet 集合中 的comparator()和desce ... -
Iterator和listIterator的区别
2011-06-30 21:44 831我们在使用List,Set的时候,为了实现对其数据的遍历,我们 ... -
Collection List Set Map 区别记忆
2011-06-30 17:08 929这些都代表了Java中的集合,这里主要从其元素是否有序,是否可 ...
相关推荐
总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...
根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...
### 快速排序实现原理及Java实现 #### 一、快速排序算法原理 快速排序是一种高效的排序算法,基于分治法的思想。它的工作原理可以概括为以下几个步骤: 1. **选择基准值**:从待排序的序列中选择一个元素作为基准...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....通过这个Java实现,你可以理解快速排序的基本工作原理,以及如何在实际编程中运用这种高效的排序算法。下载并运行提供的源代码,你可以看到快速排序的效果。
在这个Java实现的快速排序演示中,我们可以深入理解该算法的工作原理。 快速排序的主要步骤如下: 1. **选择枢轴元素**:首先,我们需要从待排序的数组中选取一个元素作为枢轴。这个元素将用来划分数组,使得其...
根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。
在这个Java实现中,我们将详细探讨快速排序的工作原理,代码结构,以及如何通过源码理解和运用这个工具。 快速排序的步骤如下: 1. **选择基准元素(Pivot Selection)**:首先,从数组中选择一个元素作为“基准”...
在Java实现这些排序算法时,我们需要理解每种排序方法的基本逻辑,并将其转化为相应的代码结构。例如,快速排序的实现通常包括`partition`函数来划分数组,以及递归调用自身来处理子数组。归并排序则需要额外的存储...
八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和基数排序等。 冒泡排序是八种排序算法中的一种,属于交换排序。冒泡排序的基本思想是重复...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R....这个Java实现的快速排序压缩包可以帮助你理解并学习如何在实际编程中应用快速排序算法。通过阅读和运行代码,你可以更深入地理解快速排序的逻辑和实现细节。
Java实现中,一般用“分区”操作来选取基准,然后递归地对左右子序列进行快速排序。 这些排序算法各有优缺点,如冒泡排序和插入排序简单但效率较低,适用于小规模数据;选择排序和希尔排序在特定情况下有较好的性能...
快速排序是一种高效的排序算法,由英国计算机科学家东尼·霍尔于1960年提出。它的主要思想是采用分治策略,通过一趟...Java实现快速排序时,可以通过创建辅助方法和递归调用来实现这个算法,从而对数组进行高效排序。
使用泛型的对象排序工具类(使用算法:快速排序),适合初学者学习快速排序的基本原理和实现。
3. **快速排序**:快速排序是另一种高效的排序算法,采用“分而治之”的策略,选取一个基准值,将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分递归进行快速排序。JAVA...
在这个Java实现中,我们将会探讨快速排序以及其变种——随机化快速排序。 1. **快速排序的基本原理** 快速排序的核心是选择一个“基准”元素,将数组分为两部分:小于基准的元素和大于或等于基准的元素。然后对这...
这里我们将深入探讨Java实现的几种内部排序算法,包括希尔排序、快速排序、堆排序、归并排序、冒泡排序、插入排序和选择排序。 首先,希尔排序是一种基于插入排序的算法,通过将原始数组分解成多个子序列来提高效率...
Java实现如下: ```java void insertionSort(int[] arr) { for (int i = 1; i ; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1...
在编程领域,排序是至关重要的一个部分,尤其是在处理大量数据时。Java作为一种广泛使用的编程语言,提供了多种...在提供的压缩包文件"Demo_4"中,应该包含了具体的Java实现代码,你可以参考并学习这些示例来加深理解。
除了这两种排序算法,还有其他多种排序算法,如冒泡排序、快速排序、归并排序等,它们各有特点,适用于不同的场景。学习和掌握这些排序算法能帮助我们更好地理解和解决实际问题。在实际开发中,我们通常会根据数据...
冒泡排序的Java实现相对简单,可以创建一个`bubbleSort()`方法来完成: ```java public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int j = 0; j ; j++) { if ...