C语言写排序算法 —— 冒泡排序

Posted 懒人漫说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]。


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


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


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

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


以上是关于C语言写排序算法 —— 冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序法

C语言——如何有效记忆冒泡排序法?

python写冒泡排序

c语言冒泡排序最终结果错误

C语言冒泡排序法代码

排序算法c语言描述---双向冒泡排序