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. vue-cli -- > 项目基本构建的方法

    本文档目的在于让对vue了解比较少的同学,能够快速搭建属于自己的vue项目.(window) 一.构建项目的前提条件 1.确保本机安装了node.js ^6 --> javascript 的服务 ...

  2. Microsoft EDP(enterprise database protection)选择应用程序在哪里可以访问企业数据

    在配置策略时,对Rule template设置完成后,添加corporate identity.关于corporate identity, 目前没有什么好的理解,翻译过来就是“公司标识”,我也理解不了 ...

  3. 使用SSH密钥方式登录ubuntu Linux,指令(ssh-keygen 和 ssh-copy-id)

    实验目的 从myVM1(本地主机)上登录myVM2(远程主机).采用密钥方式,不输入密码. 测试环境 主机:window7 sp1 64位 专业版 虚拟机:VMware workstation 12 ...

  4. PointCNN 论文翻译解析

    1. 前言 卷积神经网络在二维图像的应用已经较为成熟了,但 CNN 在三维空间上,尤其是点云这种无序集的应用现在研究得尤其少.山东大学近日公布的一项研究提出的 PointCNN 可以让 CNN 在点云 ...

  5. SAP成都研究院Sunshine: 我的C4C实习感受和保研之路

    今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过.在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工 ...

  6. SVN建立分支、代码合并以及常用操作

    在项目开发的过程中,现在遇到这样一个问题: 现在是9月份,在同一个项目中我要开发A.B两个模块,A模块是11月份上线,B模块是12月份上线,但是SVN上的trunk(主干)上的代码必须是上线的. 假设 ...

  7. IOS NSThread 线程间通信

    @interface HMViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @im ...

  8. 模拟水题,牛吃草(POJ2459)

    题目链接:http://poj.org/problem?id=2459 题目大意:有C头牛,下面有C行,每头牛放进草地的时间,每天吃一个草,总共有F1个草,想要在第D的时候,草地只剩下F2个草. 解题 ...

  9. Entity Framework的扩展库

    https://github.com/jcachat/EntityFramework.DynamicFilters Provides global & scoped filters for E ...

  10. 图像上采样(图像插值)增取样(Upsampling)或内插(Interpolating)下采样(降采样),

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图.放大图像(或称为上采样(upsamplin ...