您的位置:首页 > 理论基础 > 数据结构算法

数据结构和算法--SE002(冒泡排序)

2019-08-15 14:28 162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_37676429/article/details/99633853

 

动图表示:

冒泡排序:代码+优化 优化就是加一个标志位,如果某一次循环有几次没有交换过,所以加入一个标志位。

[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,某一次大循环中,没有发生一次交换,提前结束这个大循环(优化)

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: