标签:
相信博客里有不少这类似的基础算法了,而且有不少大神的作品,所以这篇博文多半也没有什么参考价值了,只是用来把所掌握的知识分类整理一下,希望能让看到这篇博文的小鸟们有所收获(当然,包括自己……)
冒泡排序一般是把小的向前排(或者大的向后排,一个意思,不同说法)。越到后面的值越大,类似鱼吐的泡泡,泡泡会越来越大一样。bubble就是泡泡的意思,很形象很有意思的命名。
PS.这演示图不知道是哪位高手做的,很形象,所以就盗图过来了,感谢这位高手的分享。
冒泡排序是一样比较经典的排序算法,时间复杂度为:O(n^2) 空间复杂度为:O(1)。 最坏的情况为:对正序的进行反序排序,或者对反序的进行正序排序。
所以冒泡排序是一种以时间复杂度换取空间复杂的一种算法,相对“快排、选择排序、堆排与希尔排序”稳定。
什么叫时间复杂呢?是指执行算法所需要的计算工作量。
因为时间复杂度的关系,所以在数据量小的时候可以采用,而当数据大时,应该采用别的算法。
冒泡排序的思路如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该为最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 。
以下是使用C++语言对冒泡排序算法的实现。
1 #include <iostream> 2 3 //void bubbleSort(int (&arr)[10],int size); 4 void bubbleSort(int arr[], int size); 5 int main() 6 { 7 int arr[10] = { 2, 3, 1, 4, 5, 6, 7, 9, 8, 0 }; 8 bubbleSort(arr,sizeof arr/sizeof(int)); 9 for (int i = 0; i < 10; i++) 10 std::cout << arr[i] << " "; 11 std::cout << std::endl; 12 system("pause"); 13 return 0; 14 } 15 16 //void bubbleSort(int (&arr)[10], int size) 17 void bubbleSort(int arr[], int size) 18 { 19 int temp; 20 for (int i = 0; i < size; i++) 21 for (int j = 0; j < size - 1; j++) 22 { 23 if (arr[j] > arr[j + 1]) 24 { 25 temp = arr[j]; 26 arr[j] = arr[j + 1]; 27 arr[1 + j] = temp; 28 } 29 } 30 }
标签:
原文地址:http://www.cnblogs.com/XavierJian/p/5770619.html