冒泡排序(bubble_sort)详解
2013-01-23 10:40
591 查看
前提:
1.不考虑超大数据等特殊情况
算法分析:
1.时间复杂度:核心在于嵌套的for循环,显而易见,复杂度为O(n^2)。
2.缺陷改进:传统的冒泡排序有一大缺陷,就是无法判断排序已经完成。为了弥补这个缺陷,在程序中加入哨兵变量flag,初始值设为0,一趟循环过后,如果没有发生元素交换,则结束当前函数。 这样就可以省掉传统算法中排好序后还会进行的赘余循环。
1.不考虑超大数据等特殊情况
#include<iostream> using namespace std; void bubble_sort(int a[],int h,int t); int main() { //测试数据 int a[11]={1,49,60,12,-12,101,121,62,60,8,-100}; int len=sizeof(a)/sizeof(a[0]); bubble_sort(a,0,len-1); //输出结果 for(int i=0;i<len;i++) { cout<<a[i]<<" "; } cout<<endl; } //冒泡排序 void bubble_sort(int a[],int h,int t) { int flag=0; int temp=0; for(int i=h;i<=t;i++) { for(int j=0;j<=t-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=1; } } //加入哨兵变量flag是控制循环次数。当序列已经排好时,及时终止函数。 if(1==flag) { flag=0; }else{ return; } } }
算法分析:
1.时间复杂度:核心在于嵌套的for循环,显而易见,复杂度为O(n^2)。
2.缺陷改进:传统的冒泡排序有一大缺陷,就是无法判断排序已经完成。为了弥补这个缺陷,在程序中加入哨兵变量flag,初始值设为0,一趟循环过后,如果没有发生元素交换,则结束当前函数。 这样就可以省掉传统算法中排好序后还会进行的赘余循环。
相关文章推荐
- C语言基础算法——冒泡排序(Bubble_Sort)
- 冒泡排序(Bubble_Sort)
- 冒泡排序(bubbleSort.cpp)
- 自己实现一个bubble_sort(冒泡排序),可以完成不同类型数据的排序
- 排序_Bubble_sort(冒泡排序)
- 一天一排序之“冒泡排序(Bubble_sort)”
- Double Bubble Sort(双向的冒泡排序)
- 2014.2.25 改进型冒泡排序 improved bubble sort algorithm
- Bubble-Sort(冒泡排序)
- 冒泡排序 Bubble Sort Aizu - ALDS1_2_A
- 冒泡排序(Bubble_Sort)
- Java BubbleSort(冒泡排序)
- 冒泡排序的改进(Modified_Bubble_Sort)
- Aizu ALDS1_2_A Bubble Sort(冒泡排序)
- 自己完成一个冒泡排序(bubble_sort),可以完成不同类型数据的排序
- Recursive Bubble Sort(递归冒泡排序)
- Java改进的冒泡排序ImprovedBubbleSort
- AOJ-ALDS1_2_A Bubble Sort【冒泡排序】
- linux sort 命令详解
- [转]linux sort 命令详解