数据结构和算法--SE002(冒泡排序)
动图表示:
冒泡排序:代码+优化 优化就是加一个标志位,如果某一次循环有几次没有交换过,所以加入一个标志位。
[code]package com.leo.sort; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int arr[] = {3,9,-1,10,-2}; bubbleSort(arr); System.out.println(Arrays.toString(arr)); } public static void bubbleSort(int[] arr) { // 冒泡排序 的时间复杂度 O(n^2), 自己写出 int temp = 0; // 临时变量 boolean flag = false; // 标识变量,表示是否进行过交换 for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { // 如果前面的数比后面的数大,则交换 if (arr[j] > arr[j + 1]) { flag = true; temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } if (!flag) { // 在一趟排序中,一次交换都没有发生过 break; } else { flag = false; // 重置flag!!!, 进行下次判断 } } } }
数组当然是可以自定义什么的还可以算一下时间效率神马的。
文字版本:
排序算法
排序也称排序算法(SortAlgorithm),将 一组数据,依 指定的顺序进行 排列的过程。
排序的分类:
内部排序和外部排序,外部排序就是因为数据量过大,无法全部加载到内存中内存和外部存储结合进行排序,内部排序包括如下:
插入排序(直接排序+希尔排序)
选择排序(简单选择+堆排序)
交换排序(冒泡排序+快速排序)
归并排序、
基数排序。
算法的时间复杂度:
度量一个程序(算法)执行时间性能,因为事后统计时间要求和资源浪费就用事前估算法,就要算时间复杂度!so。。。来研究时间复杂度。
时间频度:就是一个算法中语句的执行次数 T(n)
时间复杂度:算法中的基本操作语句的重复执行次数是 n 的某个函数,用 T(n)表示,若有某个辅助函数 f(n),使得当 n 趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称 f(n)是 T(n)的同数量级函数。记作 T(n)= O( f(n) ),称O( f(n) ) 为算法的渐进时间复杂度,简称时间复杂度。
3) 计算时间复杂度的方法:
去掉常数项、去掉低阶项、去掉系数!
1) 常数阶 O(1)
2) 对数阶 O(log2n) 单纯while循环
3) 线性阶 O(n) 单纯for循环
4) 线性对数阶 O(nlog2n) for循环里面嵌套while循环
5) 平方阶 O(n^2) 双重for循环
6) 立方阶 O(n^3) 三层for循环
7) k 次方阶 O(n^k) K层for循环
8) 指数阶 O(2^n) 尽量避免 if else?。。。待研究
时间复杂度由小到大:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(nk) <Ο(2n) ,随着问题规模 n 的不断增大,上述时间复杂度不断增大,算法的执行效率越低对数阶O(log2n), 线性对数阶O(nlog2n),除了常数阶以外,该种效率最高
空间复杂度:(Space Complexity)为该算法所耗费的存储空间,它也是 问题规模 n 的函数。时间复杂度才是算法分析时看重的。 因为程序执行的速度是用户感官直接的体验。一些缓存产品(redis, memcache)和算法(基数排序)本质就是用空间换时间。
冒泡排序:
Bubble Sort: 从前往后依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
1,大的循环(数组-1)次
2,每个大循环里面的次数在逐渐减小
3,某一次大循环中,没有发生一次交换,提前结束这个大循环(优化)
- 数据结构和算法-002 数组排序 冒泡排序
- scala数据结构和算法-03-冒泡排序实现
- 数据结构 求链表的长度以及用冒泡排序的算法对链表中的值进行排序
- 数据结构与算法——冒泡排序,选择排序,直接插入排序
- 算法与数据结构——排序(二)冒泡排序(上)
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 新手学习数据结构与算法---冒泡排序
- 算法与数据结构之冒泡排序
- python数据结构与算法——冒泡排序
- 经典算法与数据结构的c++实现——冒泡排序
- 算法和数据结构---排序---冒泡排序
- 第16周SHH数据结构-【项目1-验证算法(3)冒泡排序 】
- 【数据结构与算法002】基本数据结构——栈
- [置顶] 【scala 数据结构和算法】Scala实现:冒泡排序
- python算法与数据结构-冒泡排序(32)
- 数据结构 排序算法之冒泡排序
- 【数据结构和算法那些事】--【1】--冒泡排序
- 一步一步复习数据结构和算法基础-单链表冒泡排序
- PHP 数据结构 算法描述 冒泡排序 bubble sort