一、冒泡排序

  时间复杂度:O(n^2)

  公认最慢的排序,每次把最大/最小的放一边,原理:

    [57,68,59,52]

    [57,68,59,52]

    [57,59,68,52]

    [57,59,52,68]

    每次比较把相对大的数往后移,最后放到最后一位的就是整个数组中最大的数了,然后对n-1个数继续排序。

 public class BubbleSort {
public static <T extends Comparable> void sort(T[] src){
T tmp;
int len = src.length;
for(int i=0;i<len-1;i++){ // 注意是小于len-1,即遍历到倒数第二个元素
for(int j=0;j<len-1-i;j++){
if(src[j].compareTo(src[j+1])>0){
tmp = src[j];
src[j] = src[j+1];
src[j+1] = tmp;
}
}
}
}
}

二、快速排序

  时间复杂度:O(nlogn)              最坏情况:O(n^2)

  空间复杂度:O(nlogn)

  不稳定。

  原理:选定基准值,把比它大的放右边,比它小的放左边,这样就分成了两块,对这两块重复以上步骤。

  实际操作:

    [15,11,18,13,19,17,12,16,14]  移动high指针,low=0,high=8,pivot=15[位置0],第一次对比,14比基准值15小,src[low=0] = src[high8]

    [14,11,18,13,19,17,12,16,14]   移动low指针,low依次=0,1,2,high=8,14和11都比15大,18比15大,src[high=8] = src[low=2]

    [14,11,18,13,19,17,12,16,18]   移动high指针,low=2,high依次=8,7,6,到12比15小,src[low=2] = src[high=6]

    [14,11,12,13,19,17,12,16,18]   移动low指针,low依次=2,3,4,high=6,19比15大,src[high=6] = src[low=4]

    [14,11,12,13,19,17,19,16,18]   移动high指针,low=4,high依次=6,5,4,19和17都不小于15,到high=4,!low<high,此时的low/high就是基准值位置

    [14,11,12,13,19,17,19,16,18]   现在low=4,high=4,low/high[4] = pivot,19位置值等于基准值

    [14,11,12,13],,[17,19,16,18] 分成两块了,再对这两块重复以上步骤,直到分出的值不多于一个。

 public class QuickSort {
public static void sort(int[] src){
quickSort(src,0,src.length-1);
} private static void quickSort(int[] src,int low,int high){
if(low<high){
int mid = partition(src,low,high); // 获得中间值的位置
quickSort(src,low,mid-1); // 对左部分快排
quickSort(src,mid+1,high); // 对右部分快排
}
} private static int partition(int[] src,int low,int high){
int tmp = src[low]; // 记录基准值
while(low<high){ // 相等时,说明剩一个值,这就是基准值的最终位置
while(low<high&&src[high]>=tmp){
high--; // 从high开始,至有一个比基准值小的值时,high指针不动,下面的while从low开始找
}
src[low] = src[high]; // 交换值
while(low<high&&src[low]<=tmp){
low++;
}
src[high] = src[low];
}
src[low] = tmp;
return low;
}
}

-2014年04月28日--------------------更新了BubbleSort的代码

排序算法——交换排序(冒泡排序、快速排序)(java)的更多相关文章

  1. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  2. 排序算法之冒泡排序Java实现

    排序算法之冒泡排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序:ht ...

  3. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  4. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  5. 常用的排序算法介绍和在JAVA的实现(二)

    一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...

  6. 【转载】[经验] 嵌入式stm32实用的排序算法 - 交换排序

    Ⅰ.写在前面 前面写了关于ADC采集电压的文章,大家除了求平均的方式来处理采样值,还有没有使用到其他的方式来处理采集值呢? 在某些情况下就需要对一组数据进行排序,并提取头特定的数据出来使用. 排序的应 ...

  7. 常用排序算法(一)-java实现

    排序算法总结 1.十大经典算法及性能 2.具体排序算法 1.冒泡排序 循环过程中比较相邻两个数大小,通过交换正确排位,循环整个数组即可完成排序 图片演示 代码实现Java //冒泡排序 public ...

  8. [ 转载 ] js十大排序算法:冒泡排序

    js十大排序算法:冒泡排序  http://www.cnblogs.com/beli/p/6297741.html

  9. java排序算法之冒泡排序和快速排序

    总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...

  10. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

随机推荐

  1. css笔记:如何将一个页面平均分成四个部分?

    今天,我在刷面试题的时候,突然想到一道题:如何将一个页面平均分成四个部分(div)呢?其实难度也不大,于是直接上代码 <!DOCTYPE html> <html lang=" ...

  2. rem vh vw vmin vmax ex ch

    rem 我们首先介绍下和我们熟悉的很相似的货.em 被定义为相对于当前对象内文本的字体大小.如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设 ...

  3. 02151216--Ajax

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. ASP.Net连接WebServer使用Https协议(证书)

    ASP.Net使用Https(证书)协议连接WebService 最近使用ASP.Net连接WebService,不过走的协议是Https的,我一般用的使用都是普通的http协议.所以刚开始有点不值从 ...

  5. Swift 断言

    assert(条件,"输出信息"); 如: let age=-1; assert(age>=0,"age要大于0");

  6. Storm并发度和Grouping方式

    Storm并发度和Grouping方式 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans ...

  7. Distributed Machine Learning Toolkit

    http://www.dmtk.io http://www.dmtk.io/download.html

  8. Pthon MySQLdb 的安装

    说明: 要用python 去连接MySQL我们需要一个驱动程序这个程序就是MySQL-python,所以我们首先就是要下一个对应版本的MySQL-python (注意这个驱动程序只有32位版本的,所以 ...

  9. PC/SC

    简介 PC/SC规范由微软公司与世界其它著名的智能卡厂商组成的PC/SC工作组提出的.PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal C ...

  10. c++ new长度为0的数组

    在程序中发现一下代码: int CHmcVideoMgt ::OnGetDiskRunningInfo( SOCKETPARAM *pSocketInfo ,Json:: Value Param ) ...