【算法-排序之一】冒泡排序
2014-03-23 11:15
127 查看
如果数据按照一定的顺序进行排序,数据处理的效率将显著的提高。算法是编程的精髓,一个高效而合适的算法能极大的减少时间消耗与空间消耗,提到“合适”是因为没有哪个算法可以在所有情况下都表现出色,同样是排序,在不同数据规模下各种排序算法有不同的效能表现,选择合适的解决算法的才能最大限度地提高效率。
1.冒泡算法BubbleSort是常用排序算法之一,它的核心是让大(或小)的数据像水泡一样冒到最上端,这是通过不断地比较两个相邻数据的大小,前者大于后者则交换位置来实现冒泡。
如下示例:
图解如下:
排序一遍后变成
依次类推,效果犹如把最大数“冒”上去。
需要注意的细节是,对于n个数据,只需要排n-1次,故控制排序遍数的i起始值为1而不是0.在每次排序中,上次排好的数不需要再进行比较,故控制每次排序结束位置变了j的上限是num-i,随着排序次数i增加,需要排序的位置越靠前。
BuBBleSort.c
2. 时间复杂度
冒泡排序的主要时间消耗是比较,第一趟序比较n-1次,随后依次递减n-2....1,则总比较(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其时间复杂度为O(n*2).
3.空间复杂度
整个排序过程需要一个temp的空间用于交换数据,故为空间复杂度为O(1).
1.冒泡算法BubbleSort是常用排序算法之一,它的核心是让大(或小)的数据像水泡一样冒到最上端,这是通过不断地比较两个相邻数据的大小,前者大于后者则交换位置来实现冒泡。
如下示例:
图解如下:
排序一遍后变成
依次类推,效果犹如把最大数“冒”上去。
需要注意的细节是,对于n个数据,只需要排n-1次,故控制排序遍数的i起始值为1而不是0.在每次排序中,上次排好的数不需要再进行比较,故控制每次排序结束位置变了j的上限是num-i,随着排序次数i增加,需要排序的位置越靠前。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void BubbleSort(int Array[],int num){ int i; //i控制排序的遍数 int j; //j控制每次排序结束的位置 int temp; for(i=0;i<</SPAN>num;i++){ for(j=1;j<</SPAN>num-i;j++){ if(Array[j-1]>Array[j]){ temp=Array[j-1]; Array[j-1]=Array[j]; Array[j]=temp; } } } } |
BuBBleSort.c
2. 时间复杂度
冒泡排序的主要时间消耗是比较,第一趟序比较n-1次,随后依次递减n-2....1,则总比较(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其时间复杂度为O(n*2).
3.空间复杂度
整个排序过程需要一个temp的空间用于交换数据,故为空间复杂度为O(1).
相关文章推荐
- 排序算法之冒泡排序
- 常用的选择排序.Shell排序.快速排序.冒泡排序.插入排序的算法
- 算法和数据结构---排序---冒泡排序
- c语言中冒泡排序、插入排序、选择排序算法比较
- 算法[1]---排序---冒泡排序
- 数据结构 排序算法之冒泡排序
- 常见算法:C语言中的排序算法--冒泡排序,选择排序,希尔排序
- (一)算法——冒泡排序、选择排序
- 基础算法之排序(1)--冒泡排序
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- JAVA排序算法之一冒泡排序
- 基础算法(一):选择排序和冒泡排序
- 算法——排序之冒泡排序优化
- 简单排序算法:冒泡排序(交换排序)
- 经典算法-选择排序,冒泡排序,二分查找
- 数据结构 求链表的长度以及用冒泡排序的算法对链表中的值进行排序
- 简单排序算法之插入排序、选择排序和冒泡排序
- java实现排序算法之冒泡排序
- C#算法 选择排序、冒泡排序、插入排序
- 傻瓜学算法系列之排序——1.冒泡排序