冒泡排序&快速排序
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
冒泡排序&快速排序的更多相关文章
- 数组排序代码,冒泡排序&快速排序&选择排序
冒泡排序: 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 ...
- 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现
内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...
- php 冒泡排序 快速排序
$a=array('3','8','1','4','11','7'); print_r($a); $len = count($a); //从小到大 for($i=1;$i<$len;$i++) ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
- 关于冒泡排序的Java代码实现
一.排序算法的历史: 排序算法的发展历史几乎和计算机的发展历史一样悠久,而且直到今天,世界范围内依然有计算机科学家正在研究着排序的算法,由此可见排序算法的强大魅力. 我们现在介绍的排序算法都是前任 ...
- python排序算法-冒泡和快速排序,解答阿里面试题
''常见的排序算法\ 插入排序/希尔排序/直接排序/堆排序 冒泡排序/快速排序/归序排序/基数排序 给定一个列表,将这个列表进行排序,要求:> 时间复杂度要小于O(n^2) 复杂度:1.时间复杂 ...
- iOS面试题 -总结 ,你的基础扎实吗?
1.#import和#include的区别,@class代表什么? (1)#import指令是Object-C针对#include的改进版本,#import确保引用的文件只会被引用一次,这样你就不会陷 ...
- iOS 面试题搜集
1.#import和#include的区别,@class代表什么? 2.浅拷贝和深拷贝区别是什么? 3.Objective-C中类别和类扩展的区别? 4.Objective-C堆和栈的区别? 5.内存 ...
- 关于成为Java高级工程师之路
简单说明一下现状,个人目前学习使用java已经一年半,很迷茫,高不成低不就,在此列一个目标,为期18个月,再来个一年半,这样软件生涯三年后,我必须成为高级工程师! 这里涉及Java各个方面的知识,有的 ...
随机推荐
- IDEA 打包jar
1.ctrl+shift+alt+s 弹出项目设置窗口,点击Artifacts页签,点+号,选择jar Empty.修改jar name,将右侧需要打包进去的资源拖到左侧,记住Output direc ...
- Nagios监控ActiveMQ插件开发和部署注意事项
前提,监控服务器是Ubuntu14 操作系统.被监控服务器是RHEL6.5 RHEL7 1.自定义插件可以使用bash.python等脚本来实现. 2.通过nrpe插件来实现监控服务器和被监控主机之间 ...
- window/win7/wamp下安装Xdebug
1.写一个php文件,输出phpinfo(); 然后把该页面Ctrl+A全选,然后贴到http://xdebug.org/wizard.php这个地址的文本框里,他会自动检查你的配置,然后告诉你用哪个 ...
- Spring boot 实现高吞吐量异步处理(适用于高并发场景)
技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1. 新建Maven项目 asy ...
- 第49章 在SRAM中调试代码—零死角玩转STM32-F429系列
第49章 在SRAM中调试代码 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- sup inf max min
来自这里,觉得定义和举例都是最清楚的.http://www.math.illinois.edu/~ajh/347.summer14/completeness.pdf
- Eclipse使用的小技巧
1.在右键new菜单栏中添加新建JSP文件 window->perspective->customize perspective->shortcuts->web->把JS ...
- javascript入门笔记5-事件
1.继续循环continue; continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue ...
- CentOS 7 下 jdk8 安装教程
方法一: 一.下载 官网下载地址 下载需要确认当前系统是32位还是64位,可通过命令查询: sudo uname --m 根据查询结果下载对应的jdk版本(如): i686 //表 ...
- windows tensorflow 简单安装
需要64位系统windows, 下载64位的python3.5 官网下载地址:https://www.python.org/downloads/release/python-352/ 百度云下载地址: ...