1.排序分为以下四类共七种排序方法:

  交换排序:

  1) 冒泡排序 
  2) 快速排序

  选择排序:

  3) 直接选择排序 
  4) 堆排序

  插入排序:

  5) 直接插入排序 
  6) 希尔排序

  合并排序:

  7) 合并排序

2.冒泡排序

  时间复杂度O(n2)

  其基本思想是:通过相邻元素之间的比较和交换,使关键字较小的元素逐渐从底部移向顶部,就像水底下的气泡一样逐渐向上冒泡.

public class BubbleSort {

	public static void bubbleSort(int [] arr){
if(arr==null||arr.length==0){
return;
}
for(int i=0;i<arr.length-1;i++){
for(int j=arr.length-1;j>i;j--){//从后向前冒泡,把小的元素冒到前面去
if(arr[j]<arr[j-1]){
swap(arr,j-1,j);
}
}
}
} public static void swap(int [] arr,int m,int n){
int temp=arr[m];
arr[m]=arr[n];
arr[n]=temp;
}
public static void main(String[] args) {
int [] arr=new int[9];
arr[0]=9;
arr[1]=1;
arr[2]=5;
arr[3]=8;
arr[4]=3;
arr[5]=7;
arr[6]=4;
arr[7]=6;
arr[8]=2; System.out.print("[");
for (int num : arr) {
System.out.print(num+" ");
}
System.out.print("]");
System.out.println(); BubbleSort.bubbleSort(arr);
System.out.print("[");
for (int num : arr) {
System.out.print(num+" ");
}
System.out.print("]");
System.out.println(); }
}

  3.快速排序

  快速排序是不稳定的,其时间平均时间复杂度是O(nlgn)。

  快速排序的思想:冒泡+二分+递归分治

  什么叫递归分治?

  基本思想就是:将原问题分解为若干个规模更小的但结构与原问题相似的子问题,递归地解决这些子问题,然后将这些子问题的解组合为原问题的解。

  

public class Test{
//划分
public static int Division(int[] arr,int left,int right){
int base=arr[left]; //把左边的第一个数作为基准
while(left<right){
while(left<right && arr[right]>base)
--right; //从右向左遍历找第一个比基准小的元素
arr[left]=arr[right]; //找到之后就把左边和右边互换一下 while(left<right && arr[left]<base)
++left; //从左向右遍历找第一个比基准元素小的元素
arr[right]=arr[left]; //找到之后,把刚才从右向左遍历得到的arr[left]和现在的arr[right]互换
}
arr[left]=base;
return left;
}
public static void QuickSort(int[] arr,int left,int right){
int i;
if(left<right){
i=Division(arr,left,right); //分割
QuickSort(arr,left,i-1); //将两部分分别排序
QuickSort(arr,i+1,right);
}
}
public static void main(String[] args){
int[] arr={4,2,1,6,0,-5,1};
int i;
QuickSort(arr,0,arr.length-1);
for(i=0;i<7;i++)
System.out.print(arr[i]);
}
}

栗子:线性表的长度为10,在最坏情况下,冒泡排序需要比较次数为(45)

  最坏的情况即是每个元素两两都要相比较

  所以应该是9+8+7...+1=45

  

冒泡排序&快速排序的更多相关文章

  1. 数组排序代码,冒泡排序&快速排序&选择排序

    冒泡排序: for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1 ...

  2. 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现

    内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...

  3. php 冒泡排序 快速排序

    $a=array('3','8','1','4','11','7'); print_r($a); $len = count($a); //从小到大 for($i=1;$i<$len;$i++) ...

  4. 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...

  5. 关于冒泡排序的Java代码实现

    一.排序算法的历史: 排序算法的发展历史几乎和计算机的发展历史一样悠久,而且直到今天,世界范围内依然有计算机科学家正在研究着排序的算法,由此可见排序算法的强大魅力.   我们现在介绍的排序算法都是前任 ...

  6. python排序算法-冒泡和快速排序,解答阿里面试题

    ''常见的排序算法\ 插入排序/希尔排序/直接排序/堆排序 冒泡排序/快速排序/归序排序/基数排序 给定一个列表,将这个列表进行排序,要求:> 时间复杂度要小于O(n^2) 复杂度:1.时间复杂 ...

  7. iOS面试题 -总结 ,你的基础扎实吗?

    1.#import和#include的区别,@class代表什么? (1)#import指令是Object-C针对#include的改进版本,#import确保引用的文件只会被引用一次,这样你就不会陷 ...

  8. iOS 面试题搜集

    1.#import和#include的区别,@class代表什么? 2.浅拷贝和深拷贝区别是什么? 3.Objective-C中类别和类扩展的区别? 4.Objective-C堆和栈的区别? 5.内存 ...

  9. 关于成为Java高级工程师之路

    简单说明一下现状,个人目前学习使用java已经一年半,很迷茫,高不成低不就,在此列一个目标,为期18个月,再来个一年半,这样软件生涯三年后,我必须成为高级工程师! 这里涉及Java各个方面的知识,有的 ...

随机推荐

  1. IDEA 打包jar

    1.ctrl+shift+alt+s 弹出项目设置窗口,点击Artifacts页签,点+号,选择jar Empty.修改jar name,将右侧需要打包进去的资源拖到左侧,记住Output direc ...

  2. Nagios监控ActiveMQ插件开发和部署注意事项

    前提,监控服务器是Ubuntu14 操作系统.被监控服务器是RHEL6.5 RHEL7 1.自定义插件可以使用bash.python等脚本来实现. 2.通过nrpe插件来实现监控服务器和被监控主机之间 ...

  3. window/win7/wamp下安装Xdebug

    1.写一个php文件,输出phpinfo(); 然后把该页面Ctrl+A全选,然后贴到http://xdebug.org/wizard.php这个地址的文本框里,他会自动检查你的配置,然后告诉你用哪个 ...

  4. Spring boot 实现高吞吐量异步处理(适用于高并发场景)

    技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1.   新建Maven项目  asy ...

  5. 第49章 在SRAM中调试代码—零死角玩转STM32-F429系列

    第49章     在SRAM中调试代码 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  6. sup inf max min

    来自这里,觉得定义和举例都是最清楚的.http://www.math.illinois.edu/~ajh/347.summer14/completeness.pdf

  7. Eclipse使用的小技巧

    1.在右键new菜单栏中添加新建JSP文件 window->perspective->customize perspective->shortcuts->web->把JS ...

  8. javascript入门笔记5-事件

    1.继续循环continue; continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue ...

  9. CentOS 7 下 jdk8 安装教程

    方法一: 一.下载   官网下载地址   下载需要确认当前系统是32位还是64位,可通过命令查询:   sudo uname --m   根据查询结果下载对应的jdk版本(如):   i686 //表 ...

  10. windows tensorflow 简单安装

    需要64位系统windows, 下载64位的python3.5 官网下载地址:https://www.python.org/downloads/release/python-352/ 百度云下载地址: ...