【数据结构和算法那些事】--【1】--冒泡排序
2014-02-20 18:19
176 查看
个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max
首先我们来看一下冒泡排序。冒泡排序是一种很慢的排序方法,但是也是最简单的一中排序方法,所以我们一般都以冒泡排序来开始我们的排序方法之旅。
原理描述:
(以按从小到大的顺序为例)先将n个元素中的第一个K1与第二个K2进行比较,如果K1>K2,则交换两个元素的位置,进而比较第二个和第三个元素的关键字,如此类推,直到比较完第n-1 个元素和第n个元素为止,这样,第一趟就完成了,这个有n个元素的序列中关键字最大的元素就会通过交换操作被放到了第n个位置上。同理进行第二趟,第二趟是对序列中的前n-1 个元素进行操作,将这个有n-1个元素的序列中关键字最大的元素通过交换操作放到第n-1个位置上。如此迭代多次,就会得出最终排好序的序列。一般来说,第i
趟排序是对元素序列的前n-i+1 个元素进行排序,使得前n-i+1 个元素中关键字最大的元素被放置到第n-i+1 个位置上。通过n-1 趟排序,就可以完成排序,使得序列有序。
图解说明:
待排序序列 14 45 56 10 11 24 45 23
第1趟 14 45 10 11 24 45 23 56
第2趟 14 10 11 24 45 23 45 56
第3趟 10 11 14 24 23 45 45 56
第4趟 10 11 14 23 24 45 45 56
第5趟 10 11 14 23 24 45 45 56
第6趟 10 11 14 23 24 45 45 56
第7趟 10 11 14 23 24 45 45 56
第1趟过程详解:
(1) 14 45 56 10 11 24 45 23 不交换
(2) 14 45 56 10 11 24 45 23 不交换
(3) 14 45 56 10 11 24 45 23 交换
(4) 14 45 10 56 11 24 45 23 交换
(5) 14 45 10 11 56 24 45 23 交换
(6) 14 45 10 11 24 56 45 23 交换
(7) 14 45 10 11 24 45 56 23 交换
(8) 14 45 10 11 24 45 23 56 第1趟完成
实现代码:
MyUtil类的printArray方法就是一个打印数组元素的方法,在这里就不贴出来了。
相关分析:
空间效率: 仅使用一个辅存单元。
时间效率:O(n2)。
首先我们来看一下冒泡排序。冒泡排序是一种很慢的排序方法,但是也是最简单的一中排序方法,所以我们一般都以冒泡排序来开始我们的排序方法之旅。
原理描述:
(以按从小到大的顺序为例)先将n个元素中的第一个K1与第二个K2进行比较,如果K1>K2,则交换两个元素的位置,进而比较第二个和第三个元素的关键字,如此类推,直到比较完第n-1 个元素和第n个元素为止,这样,第一趟就完成了,这个有n个元素的序列中关键字最大的元素就会通过交换操作被放到了第n个位置上。同理进行第二趟,第二趟是对序列中的前n-1 个元素进行操作,将这个有n-1个元素的序列中关键字最大的元素通过交换操作放到第n-1个位置上。如此迭代多次,就会得出最终排好序的序列。一般来说,第i
趟排序是对元素序列的前n-i+1 个元素进行排序,使得前n-i+1 个元素中关键字最大的元素被放置到第n-i+1 个位置上。通过n-1 趟排序,就可以完成排序,使得序列有序。
图解说明:
待排序序列 14 45 56 10 11 24 45 23
第1趟 14 45 10 11 24 45 23 56
第2趟 14 10 11 24 45 23 45 56
第3趟 10 11 14 24 23 45 45 56
第4趟 10 11 14 23 24 45 45 56
第5趟 10 11 14 23 24 45 45 56
第6趟 10 11 14 23 24 45 45 56
第7趟 10 11 14 23 24 45 45 56
第1趟过程详解:
(1) 14 45 56 10 11 24 45 23 不交换
(2) 14 45 56 10 11 24 45 23 不交换
(3) 14 45 56 10 11 24 45 23 交换
(4) 14 45 10 56 11 24 45 23 交换
(5) 14 45 10 11 56 24 45 23 交换
(6) 14 45 10 11 24 56 45 23 交换
(7) 14 45 10 11 24 45 56 23 交换
(8) 14 45 10 11 24 45 23 56 第1趟完成
实现代码:
/** * @Description :冒泡排序 * @param k 带排序的数组 * @param start 数组中待排序区间的起点 * @param end 数组中待排序区间的终点 */ public void bubbleSort( int [] k, int start, int end){ int n = end - start + 1; for ( int i = 1; i < n; i++){ for ( int j = start; j <= end -i; j ++){ if (k[ j ] > k[ j +1]){ int temp = k[ j ]; k[ j ] = k[ j +1]; k[ j +1] = temp; } } } }
//测试代码 public static void main(String[] args) { MySortMethod method = new MySortMethod(); MyUtil myUtil = new MyUtil(); int [] r = {14, 45, 56, 10, 11, 24, 45, 23}; myUtil.printArray(r); method.bubbleSort(r, 0, r. length -1); myUtil.printArray(r); }
MyUtil类的printArray方法就是一个打印数组元素的方法,在这里就不贴出来了。
相关分析:
空间效率: 仅使用一个辅存单元。
时间效率:O(n2)。
相关文章推荐
- 第16周SHH数据结构-【项目1-验证算法(3)冒泡排序 】
- 算法和数据结构---排序---冒泡排序
- python数据结构与算法——冒泡排序
- PHP 数据结构 算法描述 冒泡排序 bubble sort
- [置顶] 【scala 数据结构和算法】Scala实现:冒泡排序
- scala数据结构和算法-03-冒泡排序实现
- 数据结构与算法之冒泡排序
- 数据结构和算法之排序四:冒泡排序
- 算法与数据结构——排序(二)冒泡排序(上)
- [py]数据结构和算法-冒泡排序
- 一步一步复习数据结构和算法基础-单链表冒泡排序
- 一步一步复习数据结构和算法基础-冒泡排序
- 经典算法与数据结构的c++实现——冒泡排序
- 新手学习数据结构与算法---冒泡排序
- Java数据结构和算法之冒泡排序(动力节点Java学院整理)
- 算法与数据结构之冒泡排序
- PHP 数据结构 算法描述 冒泡排序 bubble sort
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 算法与数据结构——排序(二)冒泡排序(中)