冒泡排序(Bubble sort)
有些经典的算法,我们应该做到信手捏来。一看到某个经典的算法,脑子里马上要想到要怎么解决,最好还要马上动手把他时间出来,不要怕做重复的工作!这就是我以后我要的!信手捏来。随时准备着实现算法!
冒泡排序:每次从起始位置开始(j=0),分别比较arr[j]与arr[j+1],若不是降序,则交换位置。这样每轮下来,就可以得到本轮中的最小,放在相应的位置。其实这个算法的关键在于循环的实现,因为每次都可以得此一个最小的,那么下次就不用再对它进行比较了。所以外层循环i每次减少1,可以用来控制循环的范围,内层循环用来控制每次比较。
因此冒泡排序总的平均时间复杂度为O(n2)。
#include <stdio.h> void BubbleSort(int arr[], int len); int main() { int arr[] = {9,4,3,7,8,2,6,10}; int len = sizeof(arr)/sizeof(int); int i; BubbleSort(arr,len); for (i = 0; i < len; i++) { printf("%3d",arr[i]); } printf("\n"); return 0; } void BubbleSort(int arr[], int len) { int i,j,tmp,flag,nCount = 0; for (i = len-1; i > 0; i--) { flag = 0; for (j = 0; j < i; j++) { if (arr[j] < arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = 1; } } if (0 == flag) { break; } } }
2013/6/15 13:47
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法