排序算法
-
冒泡排序算法
1.定义
2.算法实现- python语句实现
- C语言实现
-
复杂度分析
冒泡排序算法
1.定义
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
排序思想:
- 比较相邻的元素,如果第一个比第二个大,就交换他们两个。
- 对每一对相邻的元素做同样的工作,从开始第一对到结尾最后一队,最后的一个元素因该是最大的值。
- 对所有的元素重复上述步骤,除了最后一个元素。
- 持续每次对越来越少的元素重复上述步骤,直到没有任何一对元素需要作比较。
B站视频讲解链接:
https://www.bilibili.com/video/av47634224?from=search&seid=1841042480872293394
2.算法实现
def bubble_sort(nums):
for i in range(len(nums) - 1):
for j in range(len(nums) - i -1):
if nums[j]>nums[j+1]:
nums[j],nums[j+1]=nums[j+1],nums[j]
return nums
s=bubble_sort([3,5,1,2])
print(s)
结果验证:
s=bubble_sort([3,5,1,2])
print(s)
C语言实现
#include <stdio.h>
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
int main (void) {
elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
int len = 10;
int i;
bubbleSort (arr, len);
for (i=0; i<len; i++)
printf ("%d\t", arr[i]);
putchar ('\n');
return 0;
}
复杂度分析
时间复杂度
O(N2)