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. sharepoint国内网站一览表(转发)

    中国石油化工集团公司http://www.sinopecgroup.com/Pages/index.aspx () 中国南方航空http://group.csair.com/_layouts/grou ...

  2. python绘图 matplotlib教程

    mark一个很好的python绘图教程 https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/

  3. Kalman filter, Laser/Lidar measurement

    You can download this project from https://github.com/lionzheng10/LaserMeasurement The laser measure ...

  4. April 23 2017 Week 17 Sunday

    It is a characteristic of wisdom not to do desperate things. 不做孤注一掷的事情是智慧的表现. We are told that we ha ...

  5. 【css基础修炼之路】— 谈谈元素的垂直水平居中

    作为一个初级的前端工程师,在开发的过程中遇到了许多问题,其中使元素垂直居中这个问题难住了我,可能在大家看来这是一个非常小的问题,但是却困扰了我很长时间,于是决定做一个总结!!! 废话不多说,直接上代码 ...

  6. 2016 Multi-University Training Contest 4 - 1005 (hdu5768)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意:给你区间[L,R],问你[L, R]中有多少个数字x满足x%7=0且x%p[i]≠a[ ...

  7. 一种轻量级的C4C业务数据同步到S4HANA的方式:Odata通知

    SAP Cloud for Customer和SAP其他传统产品的同步,除了使用SAP Netweaver Process Integration和SAP HANA Cloud Integration ...

  8. 94. Binary Tree Inorder Traversal(inorder ) ***(to be continue)easy

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  9. 我的Java修养

    无论如何我都会以这种方式严于律己,如有错误接受修正. 1.戒掉对友情和爱情的幻想 2.针对人的行为进行分析,而不是其语言 3.解决一个问题,这个问题会成为解决后续问题的基础和前提 4.不要炫耀,自负, ...

  10. 检测浏览器中是否有Flash插件

    由于IE和非IE浏览器检测方式不同,所以代码如下 function hasPlugin(name){ debugger; name = name.toLowerCase(); for(var i=0; ...