新闻动态Site navigation
联系方式Contact
地 址:北京市丰台区66号
电 话:17301466985
网址:yntbgc.com
邮 箱:30221212@qq.com

地 址:北京市丰台区66号
电 话:17301466985
网址:yntbgc.com
邮 箱:30221212@qq.com
冒泡排序的基本思路非常简单,即重复(fu)地走访过要排序的语言冒元素列,一次比较两个相(xiang)邻的泡排元素,如果它们的语言冒顺序错误就把它们交换过来,这个过程会重(zhong)复进行,泡排直到没有(you)相邻元素需要交换,语言冒也就是泡排说该数列(lie)已经排序完成。(图片来源网络,语言冒侵删)
1、比较相邻的元素,如果第一个比第二个(ge)大,就交换它们两个;

2、对每一对相邻元素做同样(yang)的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数;

3、针对所有的元素重复以(yi)上的步骤,除了最后一个;

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要交换,此时序列已经完全排序。
优点:
(图片来源网络,侵删)易于理解与(yu)实现;
可以原地排序,不需要额外的大(da)量存储空间。
缺点:
效率较低,最坏情况下时间复杂度为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、标志位:使用一个标志位(wei)来跟踪每一趟排序中是否发生了交换,如果在(zai)某趟排序中没有发生任何交(jiao)换,说明数组已(yi)经排序完成,可以直接(jie)跳出循环。
2、记录最后交换的位置:每趟排序都会使得(de)最大(或最小(xiao))的元素“浮”到其最终位(wei)置,因此可以记录每趟排序中最(zui)后一次发(fa)生交换的位置,下一趟排序只需要到这个位置即可,减少不必要的比较。