冒泡排序的基本思路
冒泡排序的基本思路非常简单,即重复地走访过要排序的元素列,一次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来,这个过程会重复进行,直到没有相邻元素需要交换,也就是说该数列已经排序完成。
算法实现步骤
1、比较相邻的元素,如果第一个比第二个大,就交换它们两个;
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数;
3、针对所有的元素重复以上的步骤,除了最后一个;
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要交换,此时序列已经完全排序。
算法优缺点
优点:
易于理解与实现;
可以原地排序,不需要额外的大量存储空间。
缺点:
效率较低,最坏情况下时间复杂度为O(n²),n为数组长度;
在数据量较大时不适用。
代码实现
#include <stdio.h> void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len 1; i++) { for (j = 0; j < len 1 i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70}; int len = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, len); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } return 0; }
优化技巧
1、标志位:使用一个标志位来跟踪每一趟排序中是否发生了交换,如果在某趟排序中没有发生任何交换,说明数组已经排序完成,可以直接跳出循环。
2、记录最后交换的位置:每趟排序都会使得最大(或最小)的元素“浮”到其最终位置,因此可以记录每趟排序中最后一次发生交换的位置,下一趟排序只需要到这个位置即可,减少不必要的比较。
冒泡排序虽然简单,但是效率不高,适用于小数据集或者基本有序的数据集,对于大数据集,一般推荐使用更高效的排序算法如快速排序、归并排序等。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/767455.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复