vlambda博客
学习文章列表

C语言写排序算法(一) —— 冒泡排序

    发现学习C语言这么久了,还没有把各种排序算法理一遍,今天开始第一个排序算法,最容易理解的冒泡排序。


    直接上代码:

void bubble_sort(int arr[], int n){ int i, j;    int tmp;  for (i = 0; i < n; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) {                tmp = arr[j]; arr[j] = arr[j + 1];                arr[j + 1] = tmp; } } }}


    测试代码:

#include <stdio.h>void bubble_sort(int arr[], int n);int main(){ int arr[] = { 8, 6, 23, 2, 17, 36 };    int N = sizeof(arr) / sizeof(int), i = 0;    for (i = 0; i < N; ++i) { printf("%d ", arr[i]); } printf("\n"); bubble_sort(arr, N);    for (i = 0; i < N; ++i) {        printf("%d ", arr[i]); } printf("\n"); return 0;}

        执行结果:

    


        排序原理:

        

        上图是外层i循环的第一个循环过程,可以看到, 这个过程执行完成之后,会将最大的数放到数组的最后面,这就是冒泡的意思,将本轮最大的(或最小)移动到数组的最后,每个子循环从0开始,到 n - i - 1 结束,i的意思是已经冒出多少个泡了,-1 的意思是 因为判断 arr[j] 和 arr [j + 1]。


        所以当执行数组元素个数次外层循环之后,就可以将数组排好序了。


        但是冒泡排序的时间复杂度有点高,因为他用到了两个循环,而且大家从过程中也可以看出,有很多无效的判断(本来已经是左小右大,还是要执行判断)。


今天就先到这里吧,如果感觉有用的话希望你可以分享给自己的同学、伙伴。谢谢你啦。

-------------------------------------------------------------------------