数据结构----排序算法(1):冒泡排序
2019-05-31 19:52
260 查看
概述
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
1.1 算法描述
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
1.2 算法分析
时间复杂度:T(n) = O(n2) 最好情况O(n) 最坏情况O(n2)
空间复杂度:O(1)
稳定性:稳定
1.空间复杂度:原地排序
2.稳定性:稳定
3.时间复杂度:
最好情况:O(n)
最坏情况:n*(n-1) =O(n^2)
平均情况:O(n^2)
例如:{6,9,1,4,5,8,7,0,2,3}进行排序
第一趟:1.先比较6和9,9更大,则不移动,在比较9和1,9更大,9和1交换位置,到最好后得到第一趟排序后的数列:
{6,1,4,5,8,7,0,2,3}
第二趟:继续上述操作,得到{1,4,5,6,7,0,2,8,9}
...……………………………………
可以看出,每经过一次排序后,都会有一个最终确认的值在最后一个。
java代码实现:
[code]public class bubbleSort { public static void sort(int[] arr){ if(arr==null||arr.length==1) return; //循环的次数 for(int i=0;i<arr.length-1;i++){ //j表示要比较元素的第一个.arr.length-1-i是无序数组的第一个 boolean isSorted=true;//假设已经有序了 for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; isSorted=false; } } if(isSorted==true) return; print(arr); } } public static void print(int[] arr){ if(arr==null) return; for(int i:arr){ System.out.print(i+" "); } System.out.println(); } public static void main(String[] args) { int[]arr={6,9,1,4,5,8,7,0,2,3}; System.out.println("排序前:"); print(arr); System.out.println("排序后:"); sort(arr); print(arr); } }
排序的过程及结果如下所示:
相关文章推荐
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
- 数据结构6-排序算法(直接插入排序、希尔排序、快速排序、归并排序和堆排序)
- 暑假集训 8.13 数据结构实验之排序二:交换排序 (冒泡 与 快排.....)
- 数据结构与算法之排序算法---简单选择排序
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- 【数据结构】——排序算法——1.1、直接插入排序
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 从零开始_学_数据结构(六)——排序(冒泡、插入、希尔、简单选择、归并、快速)
- 数据结构-排序: 各种排序算法全分析
- 数据结构与算法之--简单排序:冒泡、选择和插入
- 深层次两张图解经典6大排序与6大基础数据结构——学完这些,妈妈再也不用担心我的排序算法与数据结构,学习笔记大放送
- 【数据结构与算法】排序算法——快速排序
- java数据结构之排序_排序算法的时空复杂度介绍
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- 数据结构中排序算法- 二叉树排序(7)
- 数据结构与算法 4:排序算法,选择/插入/冒泡/希尔/快速/归并
- 数据结构之排序1(直接插入,冒泡,希尔,选择)
- 数据结构----排序算法(3):插入排序
- [C++]数据结构实验02:冒泡、插入、基数三种排序算法
- SDUT-3399 数据结构实验之排序二:交换排序(冒泡+快排)