排序算法之冒泡排序

来源:互联网 发布:股票分时数据 编辑:程序博客网 时间:2024/05/17 06:33

学习数据结构, 大都是从冒泡排序学起, 冒泡排序是最简单基础的排序。


冒泡排序思路分析(从小到大排序):

1、从数组尾部开始, 比较相邻的两个元素,如果第一个比第二个大,就交换他们

2、对每一对元素做相同的操作, 直到数组首部,至此,一趟排序结果,最小的元素浮在了第一个元素的位置

3、除了第一个已经排序的元素,针对其他元素重复以上的步骤。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何元素。


冒泡排序伪代码和时间复杂度分析:


bubbleSort(A, length)

{

for i<- 1 to length//运行时间A

for i <-length-1 to i//运行时间A

do if  A[i] > A[i-1]//运行时间B

then swap([A[i], A[i-1[)///运行时间C

}


A,B,C为常量的运行时间, 总运行时间为(1+2+.....N)(A+B+C) = Kn(n-1)/2, K为常量, 时间复杂度为O(n^2)



C++代码实现:


#include <stdio.h>typedef void (*Func)(int *a, int *b);void swap(int *a, int* b){int c = *a;*a = *b;*b = c;}/*judge if it is content*/void is_content(int *a, int *b){if (*a < *b){swap(a, b);}}void bubble_sort(int* array, int length, Func func){if (NULL==array || length<=0){return;}for (int i=0; i<length; i++){for(int j=length-1; j>i; j--){func(&array[j], &array[j-1]);}}}void print(int* array, int length){if (NULL==array || length<=0){return;}for (int i=0; i<length; ++i){printf("%d\t", array[i]);}printf("\n");}int main(int argc, char** argv){int array[5] = {1, 3, 2, 5, 4};bubble_sort(array, 5, is_content);print(array, 5);return 0;}


原创粉丝点击